标签:环境 关联 EAP 进入 print pat items UNC foreach
逛知乎时接触到了.net core,以前虽然知道有c#这个语言,也了解一些和java之间的关联性,但还是云里雾里,听说java岗和.net之间很容易互转,那我也来试试。
.net core 3.1
c# 8.0
vs code
使用的是vs code环境,不如vs方便,但是轻量。
安装好.net core sdk以及一些c#插件。
进入vscode的插件市场,找到c#(安装最多的那个)。全名是:
C# for Visual Studio Code (powered by OmniSharp).
安装完插件,会默认加入两个依赖包,稍等即可。
我在.net core sdk中没有找到单独的c#编译器,不过.net中含有c#编译器,需要运行单文件的可以独立下载c#的编译器
安装完.net core sdk后,在命令行窗口下使用dotnet
命令,出现以下提示即安装成功。
PS D:\> dotnet
Usage: dotnet [options]
Usage: dotnet [path-to-application]
Options:
-h|--help Display help.
--info Display .NET Core information.
--list-sdks Display the installed SDKs.
--list-runtimes Display the installed runtimes.
使用dotnet new xxx可创建相关应用。
dotnet new console -output project_name //console应用
dotnet new webapp -o projrct_name //webapp
....
如控制台应用,名为helloworld;
dotnet new console --output helloworld
在目录下会生成一个文件夹helloworld.有以下文件:
helloworld\helloworld.csproj//配置文件
helloworld\Program.cs//项目入口文件
项目入口文件如下:
using System;//使用系统命名空间
namespace helloworld//命名空间
{
class Program//类名
{
static void Main(string[] args)//主方法
{
Console.WriteLine("Hello World!");//输出
}
}
}
此时在控制台运行dotnet run即可运行项目。
>dotnet run
Hello world!
配置文件如下:
<Project Sdk="Microsoft.NET.Sdk">//sdk类型
<PropertyGroup>
<OutputType>Exe</OutputType>//输出类型为exe
<TargetFramework>netcoreapp3.1</TargetFramework>//目标框架
</PropertyGroup>
</Project>
C#和Java语法基本相似,都和C++有联系。另外C#也是可以代替JavaScript的,所以和Js的语法也有部分相同。接下来了解一下C#和Java的不同处。
Java中对不同文件的管理是通过package,而C#是沿用的C++的命名空间。
在进行变量声明的时候,var
关键字可以进行类型推断,这和JS一样。
C#通过$和{}执行模板语法。
var str="World!!!";
Console.WriteLine($"Hello {str}");
//Hello World!!!
C#和Java都为for循坏提供了增强,用于支持数据结构类型(数组、集合等)。
C#中的foreach循环:
var s=new int[]{0,1,2,3};
foreach(var i in s){
Console.WriteLine(i);
}
Java通过item:items的形式:
int[] s=new int[]{0,1,2,3};
for(int i:s){
System.out.println(i);
}
C#中支持结构体,这和C++一样。
C#中支持结构体,这和C++一样。
如下所示;使用struct关键字声明,拥有构造方法以及普通方法。
public struct Name {
public string fName;
public string lName;
public Name(string fName,string lName){
this.lName=lName;
this.fName=fName;
}
public string getname(){
return this.fName+" "+this.lName;
}
}
使用方法和类一样。
var n=new Name("Tom","Blue");
Console.WriteLine(n.getname());
和类不同的是:
结构体是值类型,并且不支持继承。
但是支持接口。
Java和C#都提供了Lambda表达式,Java从jdk1.7开始支持。
Java使用前需要有函数式接口,使用格式为->
//使用前需要先定义一个函数式接口
@FunctionalInterface
interface FuncIn{
void hello(String s);
}
//之后使用lambdab表达式实现这个接口,才能调用。
FuncIn f=s->{
System.out.println("hello "+s);
};
f.hello("jim");
C#的Lambda表达式使用委托类型Action和Func来实现,无返回值使用Action类型,有返回值使用Func类型,需要泛型支持。
使用格式为委托类型<...T> 函数名=(...T) =>{}
//无返回值使用Action类型
Action f=()=>Console.WriteLine("a func ....");
f();
Action<int> f1=x=>{
Console.WriteLine(x)
};
f1(10);
//有返回值使用Func类型
Func<int,int> f2=x=>x*x;
Console.WriteLine(f2(2));
Func<string,string,string> f3=(a,b)=>a+"---"+b;
Console.WriteLine(f3("hello","world"));
C#使用委托机制的Lambda表达式比较简洁。
Java中私有属性常用的get\set方法,C#中称为访问器,结构体和类都支持,格式如下:
public string FName{
get=>this.fName;//使用了lambda表达式
set=>this.fName=value;
//get{return this.fName;}//实际格式
//set{this.fName=value;}
//get; set;自动实现对访问器的支持
}
//外界可以通过x.FName进行访问,缺失get将无法访问,缺失set将无法修改。
C#中的继承使用:表示。如:
public class His:Hi{
}
//此时His类已经继承Hi类的所有公开部分。
//使用父类接收子类的实例,并且调用父类的方法。
Hi h=new His();
h.sayHi("sally");
C#中还有一些如事件、委托、索引器等概念。
C#开发者和Java开发者在语法上的转换不吃力。
标签:环境 关联 EAP 进入 print pat items UNC foreach
原文地址:https://www.cnblogs.com/cgl-dong/p/12193748.html