java dotnet core_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!

配置文件如下:

//sdk类型

Exe//输出类型为exe

netcoreapp3.1//目标框架

从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++一样。

如下所示;使用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 f1=x=>{

Console.WriteLine(x)

};

f1(10);

//有返回值使用Func类型

Func f2=x=>x*x;

Console.WriteLine(f2(2));

Func f3=(a,b)=>a+"---"+b;

Console.WriteLine(f3("hello","world"));

java中也有很多内置的函数式接口供选择,不过还是没有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开发者在语法上的转换不吃力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值