java到c#入门(.net core)

java到c#入门(.net core)

前言

逛知乎时接触到了.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>

从java到c

C#和Java语法基本相似,都和C++有联系。另外C#也是可以代替JavaScript的,所以和Js的语法也有部分相同。接下来了解一下C#和Java的不同处。

1、模块管理

Java中对不同文件的管理是通过package,而C#是沿用的C++的命名空间。

2、类型推断

在进行变量声明的时候,var关键字可以进行类型推断,这和JS一样。

3、字符串内插

C#通过$和{}执行模板语法。

var str="World!!!";

Console.WriteLine($"Hello {str}");
//Hello World!!!
4、foreach循环

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);
        }
5、结构体

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());

和类不同的是:

结构体是值类型,并且不支持继承。

但是支持接口。

6、lambda表达式

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表达式比较简洁。

7、访问器

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将无法修改。
8、继承

C#中的继承使用:表示。如:

public class His:Hi{
        
    }

//此时His类已经继承Hi类的所有公开部分。

//使用父类接收子类的实例,并且调用父类的方法。
 Hi h=new His();
 h.sayHi("sally");

C#中还有一些如事件、委托、索引器等概念。

C#开发者和Java开发者在语法上的转换不吃力。

相关推荐