java到c#入門(.net core)

java到c#入門(.net core)

前言

逛知乎時接觸到了.net core,之前雖然知道有c#這個語言,也瞭解一些和java之間的關聯性,但仍是雲裏霧裏,據說java崗和.net之間很容易互轉,那我也來試試。java

環境

.net core 3.1web

c# 8.0shell

vs codec#

使用的是vs code環境,不如vs方便,可是輕量。數組

安裝好.net core sdk以及一些c#插件。數據結構

進入vscode的插件市場,找到c#(安裝最多的那個)。全名是:app

C# for Visual Studio Code (powered by OmniSharp).框架

安裝完插件,會默認加入兩個依賴包,稍等便可。webapp

我在.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的不一樣處。

一、模塊管理

Java中對不一樣文件的管理是經過package,而C#是沿用的C++的命名空間。

二、類型推斷

在進行變量聲明的時候,var關鍵字能夠進行類型推斷,這和JS同樣。

三、字符串內插

C#經過$和{}執行模板語法。

var str="World!!!";

Console.WriteLine($"Hello {str}");
//Hello World!!!
四、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);
        }
五、結構體

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

和類不一樣的是:

結構體是值類型,而且不支持繼承。

可是支持接口。

六、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"));

java中也有不少內置的函數式接口供選擇,不過仍是沒有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開發者在語法上的轉換不吃力。

相關文章
相關標籤/搜索