zoukankan      html  css  js  c++  java
  • 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.有以下文件:

    helloworldhelloworld.csproj//配置文件
    helloworldProgram.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++一样。

    如下所示;使用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"));
    

    java中也有很多内置的函数式接口供选择,不过还是没有C#使用委托机制的Lambda表达式比较简洁。

    7、访问器

    Java中私有属性常用的getset方法,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开发者在语法上的转换不吃力。

  • 相关阅读:
    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED解决方法
    Ubuntu 修改host并重启网络
    Ubuntu批量修改权限
    win10 vm 11 桥接模式配置
    Ubuntu获取root 权限,开机自动登入root
    ptxas fatal : Unresolved extern function Error 255
    Ubuntu 16.04 LTS安装 TeamViewer
    SSD win7优化步骤
    正则表达式
    C语言中,float在内存中的储存方式
  • 原文地址:https://www.cnblogs.com/cgl-dong/p/12193748.html
Copyright © 2011-2022 走看看