c#语言 订阅
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。 [1] 展开全文
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。 [1]
信息
类    别
程序设计语言
影响语言
C++、C#、D、Java、JavaScript、ObjectPHP等
创始时间
1972年
主要编译器
Visual C++、Clang、GCC、Turbo C等
中文名
C语言
创始人
Dennis MacAlistair Ritchie
发    源
BCPL语言
外文名
C Programming Language
c语言简介
C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%~20%。因此,C语言可以编写系统软件。 [2]  当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显著。 [3]  冯.诺依曼在1945年提出了现代计算机的若干思想,被后人称为冯.诺依曼思想,这是计算机发展史上的里程碑。自1945 年至今大多采用其结构,因此冯.诺依曼被称为计算机之父。他的体系结构计算机由运算器、控制器、存储器、输入设备、输出设备五大部件构成。 C语言拥有一套完整的理论体系经过了漫长的发展历史,在编程语言中具有举足轻重的地位。 [4] 
收起全文
精华内容
下载资源
问答
  • C#语言

    千次阅读 2019-11-08 10:54:13
    C#语言 (一)第一个C#程序 (1).NET与C# 1、.NTE的含义:.NET是Micorsoft.NET的简称,基于Windows平台的一种技术,它包含了能在.NET Framework平台运行的所有编程语言。它同时也是C#的运行环境,.NET是属于微软...

    C#语言

    (一)第一个C#程序

    (1).NET与C#

    1、.NTE的含义:.NET是Micorsoft.NET的简称,基于Windows平台的一种技术,它包含了能在.NET Framework平台运行的所有编程语言。它同时也是C#的运行环境,.NET是属于微软公司所有。

    2、C#的含义C#是一种全新的语言,它是专为.NET开发而设计的编程语言。同时也是微软为奠定其下一代互联网霸主地位而打造的,是Microsoft.NET平台运行的主流语言。

    (2)第一个C#程序的创建

    1、C#程序的创建

    ​ 启动Visual Studio 2019 ——> 新建项目——> 生成可执行文件 ——> 开始运行

    2、认识C#程序

    (1)C#中的关键字

    ​ namespace 关键字:namespace是C#的命名空间,也是C#中组织代码的方式,作用类似于Java中的package(包)。

    ​ using关键字:在Java中,如果导入其他包,应该使用import关键字。而在C#中,使用using关键字来引用其他命名空间,它的作用和Java中的import类似。

    ​ class关键字:C#和Java一样是面向对象的一种语言,在C#中class关键字也表示类。

    注:C#中不要求类名必须与源文件的名称一致。

    ​ Main()方法:在C#中的Main()方法和Java中的main()方法的作用是一样的,是程序运行的入口,应用程序从这里开始运行。

    ​ 在C#中的Main()方法有如下四种形式:

    static void Main(string[] args){}
    static void Main(){}
    static int Main(string[] args){}
    static int Main(){}
    

    ​ 关键代码:Main()方法中添加的两行代码就是这个小程序的关键代码,是用来输出和输入的。

    ​ 代码如下:

    Console.WriteLine("Hello World");		//从控制台输出内容
    Console.ReadLine();					   //从控制台输入
    

    (3)C#中的变量和常量

    1、C#中的数据类型

    ​ 如下表所示:

    常用数据类型 Java C# 举例
    整型 int int 年龄
    浮点型 float float 成绩
    双精度型 double double 圆周率
    字符串型 String string 姓名
    布尔型 boolean bool 是否为少数民族

    注:在为浮点型变量赋值时,C#语言要求赋值数据必须以字母f或F结束。

    2、C#中的变量

    ​ C#中的变量声明方式与Java是相同的。 语法:数据类型 变量名称;

    ​ C#的变量命名规则与Java也基本相同,只是"$"符号在C#中是不能使用的,因此变量的命名规则可以简单总结为以下三条:

    ​ 组成:52个英文字母(AZ,az)、10个数字(0~9)、下划线(_),除此之外不能含有其他的字符。

    ​ 开头:只能以字母或下划线开头。

    ​ 不能使用的:不能是C#中的关键字。

    3、C#中的常量

    ​ 常量的定义:常量就是在程序运行过程中保持不变的值。

    ​ 语法:

    const 数据类型常量名称  = 值;
    

    ​ 例如:

    	public const int dayMax = 7 ;  //定义常量dayMax
    

    ​ 常量的命名规范如下:

    ​ 1、常量名称必须具有一定的实际意义;

    ​ 2、常量名最好是以 大写字来命名,中间可根据意义的连接性用下划线做连接;

    ​ 3、常量名称长度最好不要超过25个字符;

    (4)Console类

    1、C#向控制台输出

    ​ 利用Console.WriteLine()方法输出有三种方式:

    ​ 方法一:

    Console.WriteLine();
    

    ​ 方法二:

    Console.WriteLine(要输出的值);
    

    ​ 方法三:

    Console.WriteLine("格式字符串",变量列表);
    //这是C#中的新语法,先举个例子:
    string couruse = "C#";
    Console.WriteLine("我的课程名称是:{0}",couruse);
    //在这里{}里面的值,我们称之为占位符,占位符从0开始。
    

    2、C#从控制台读入

    ​ 与Console.WriteLine()对应,从控制台输入可以使用Console.ReadLine()方法。Write是写的意思,Read是读的意思。

    语法:Console.ReadLine();

    ​ 例如:

    //输入名字
    
    string name = Console.ReadLine();
    
    //输入年龄
    //类型的转换
    int age = int.Parse(Consloe.ReadLine());
    

    注:数据类型.Parse()方法的作用是把字符串转换为该数组类型。

    (5)类和对象

    1、自定义方法

    ​ 除了使用.NET提供的类的方法,也可以在类中添加自定义的方法。在C#中定义方法的语法与Java语法类似。语法如下:

    [访问修饰符] 返回值类型 方法名(参数列表)
    {
    	//方法的主体
    }
    

    访问修饰符: 在C#中将会使用两个访问修饰符,一个是public(公有的),另一个是private(私有的)。

    方法的返回值类型: 我们编写的方法是实现特定功能的模块,可供他人调用,在调用后可以返回一个值,这个返回值的数据类型就是方法的返回值类型,可以是int、float、double、bool、string等。如果方法不返回任何值,需要使用void关键字。

    方法名: 每个自定义的方法都要有一个名称,方法的名称应该有明确的含义,这样别人在使用的时候就能清楚地知道这个方法能实现什么功能。

    参数列表:可以向方法中传递参数,这些参数构成了参数列表。如果没有参数就不用参数列表。参数列表中的每个参数都是通过"类型参数名"形式进行声明的,各个参数之间用逗号分开。

    方法的主体:方法的主体部分就是这个方法实现某一特定功能的代码。自定义方法时,应该先写方法的声明,包括访问修饰符、返回值类型、方法名、参数列表、然后写方法的主体。

    2、理解类和对象

    类是创建对象的模板,对象是类的一个具体实例。

    ​ C#语言中,定义类的语法:

    [访问修饰符] class 类名
    {
        //类的主体
    }
    

    ​ C#在类中可以包含字段、属性和方法,每个类可以使用访问修饰符来设置该类的访问权限。

    3、注释

    ​ 在C#中有四种注解:分别是:

    ​ 单行注释:// 文档注释:///

    ​ 块注释:/* */ 折叠注释:以#region 开头 ,以#endregion结尾

    (二)C#语法快速热身

    (1)选择结构

    1、if选择结构

    ​ C#中if结构也分为四种结构:简单if结构、if…else结构、多重if结构、if嵌套结构;语法和Java中的语法一致,如下所示:

    ​ (1)简单if结构语法:

    if(条件表达式)
    {
        //代码块
    }
    

    ​ (2)if…else结构语法:

    if(条件表达式){
    //代码块1
    }
    else
    {
    //代码块2
    }
    

    ​ (3)多重if结构语法:

    if(条件表达式1)
    {
    //代码块1
    }
    else if(条件表达式2)
    {
    //代码块2
    }
    else
    {
    //代码块3
    }
    

    ​ (4)if嵌套语法:

    if(条件表达式1)
    {
    if(条件表达式2)
    {
    //代码块1
    }
    else
    {
    //代码块2
    }
    }
    else
    {
    //代码块3
    }   
    

    2、switch选择结构

    ​ C#switch选择结构语法:

    表达方式一:

    switch(表达式 )
    {
        case 常量表达式 1:
                //语句1
                break;  //必须有
        case 常量表达式 2:
                //语句2
                break;  //必须有
            ......
                defaull:
            //语句n;
            	break;  //必须有
    }
    

    表达式二:

    switch(表达式 )
    {
        case 常量表达式 1:
        case 常量表达式 2:
                //语句1
                break;  //必须有
            ......
                defaull:
            //语句n;
            	break;  //必须有
    }
    

    注:在C#中的switch结构中的break是必须有的,但是如果case后面没有语句的话就不需要break。

    (2)数组和循环

    1、一维数组

    (1)声明的数组

    ​ 在Java中声明数组的两种方式:

    ​ Java中的数组语法

    //方式一
    数据类型[] 数组名;
    //方式二
    数据类型 数组名[];
    

    ​ 但是在C#中只有一种声明方式

    ​ C#中的数组声明语法

    数据类型[] 数组名;
    例如:
    int[] array;
    

    (2)数组长度和数组下标

    数组名.Length//数组长度
    数组名[下标]//数组下标
    

    2、对象数组

    ​ C#的对象数组与Java的对象数组并无差异。

    ​ 举例如下:

    class Program
        {
            static void Main(string[] args)
            {
                Student[] stus = new Student[3];
                stus[0] = new Student();
                stus[0].name = "张浩";
                stus[0].score = 100;
                stus[1] = new Student();
                stus[1].name = "李成";
                stus[1].score = 99;
                stus[2] = new Student();
                stus[2].name = "江亦";
                stus[2].score = 95;
                Console.WriteLine("前三名学员的信息为:");
                foreach (Student stu in stus)
                {
                    stu.showInfo();
                }
                Console.ReadLine();
            }
        }
    

    3、循环数组

    ​ 在C#中有三种循环和Java中的循环是一样的,但是在C#中的foreach循环结构和Java中的不太一样。

    (1)while循环

    while(循环条件){
        //循环操作
    }
    

    (2)do-while循环

    do{
        //循环操作
    }while(循环条件);
    

    (3)for循环

    for(表达式1;表达式2;表达式3){
        //循环体
    }
    

    (4)foreach循环

    foreach(元素类型 元素变量名 in 数组){
        //代码块
    }
    

    循环应用的区别如下:

    ​ while循环:是先判断条件表达式是否成立。若条件成立,则执行循环体;否则结束循环。

    ​ do-while循环:先执行依次循环再判断条件表达式是否成立。若条件成立,则继续循环;否则结束循环。

    ​ for循环:必须使用整型变量做循环计算器,通过条件表达式限定计数器变量值来控制循环。

    ​ foreach循环:用于遍历给定数组的所有值。

    4、跳转语句

    (1)break语句

    ​ break语句用于终止某个循环,使程序跳转到循环体外的下一条语句。在循环中位于break后的语句将不再执行,循环也停止执行。

    (2)continue语句

    ​ 在for循环结构中,continue语句使程序先跳转到迭代部分,然后判定循环条件。如果为true,则继续下一次循环;否则,终止循环。在while循环结构中,continue语句执行完毕后,程序将直接判断循环条件。continue语句只能用在循环结构中。

    (3)冒泡排序

    ​ 冒泡排序:冒泡排序的过程就像它的名称一样,如果把较小的数比作气泡,排序的过程就是气泡不断向上冒的过程,越小的数越高。冒泡排序算法是两两相邻比较;不满足条件就进行交换。

    int[] array = {30,80,54,98,66,100};
    int temp; //临时变量
    //开始排序————使用冒泡排序进行升序排序
    for(int i = 0;i<array.Length-1;i++)
    {
        for(int j = 0; j < array.Length-1-i; j++)
        {
            if(array[j] > array[j+1])  //在这里大于符号(>)表示升序,小于符号(<)表示降序 
            {
                //交换元素
                temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
    

    注:冒泡排序速记口诀(升序):

    (1)N个数字来排队,两两相比小靠前。

    (2)外层循环N-1,内层循环N-1-i。

    (3)如果要降序排序,只要把程序中的大于号换成小于号就行了。

    (三)使用属性升级MyBank

    (1)private访问修饰符

    private访问修饰符

    访问修饰符 访问权限 访问级别
    public 不受任何限制 最高
    private 只有类的内部可以使用 最低

    举例:

    class Student
        {
            private string _name;//姓名
            public int _age = 19;//年龄
            public string _cardID = "110882199410252476";//身份证
            public void SetName(string name)
            {
                _name = name;
            }
            public void Say()
            {
                Console.WriteLine("大家好!我叫{0},今年{1}。",_name,_age);
            }
        }
    
    

    (2)this关键字

    ​ this关键字:是指当前对象本身。通过this可以引用当前类的成员变量和方法,但是this不能在静态(static)成员中使用。

    (3)C#属性

    (1)C#属性

    ​ 在C#中,字段通常是私有的。如果要访问类中的字段,需要通过get和set访问器实现,这种结合了字段和方法的实现方式我们称之为属性(property)。

    语法:

    private string _name;
    public string Name
    {
    get{return _name;}
    set{_name = value;}
    }
    

    ​ 在这里get表示返回值,也是只读形式;set表示赋值,也是只写形式;如果要在封装里表示读写模式,就要get和set一起使用,只读就只用get方法,只写就只用set方法。

    (2)属性的数据类型

    ​ 定义类中的一个属性时,属性的数据类型必须与它所访问的字段类型一致。

    (3)属性的访问类型

    ​ 属性除了可以约束数据访问外,还可以设置读、写属性来限定它的访问类型。属性的访问类型分为以下三种:

    ​ 只读属性:只包含get访问器。

    ​ 只写属性:只包含set访问器。

    ​ 读写属性:包含get和set访问器。

    (4)值传递和引用传递

    1、值传递

    ​ 值传递分为基本数据传递和引用型数据传递。

    ​ 基本数据类型:形参所做修改不会影响实。
    ​ 引用数据类型:形参对具体值的修改会影响实参。

    2、地址传递

    ​ 地址传递也分为基本数据类型传递和引用型数据类型传递,但是地址传递无论是基本数据类型还是引用型数据类型,都会改变的实参。

    ​ 形参所做修改一定会影响实参实现方式:在形参和实参前面加ref。

    (四)深入C#的String类

    (1)C#中的String类

    1、常用的字符串处理方法

    方法 说明
    bool Equals (string value) 比较一个字符串与另一个字符串value的值是否相等,返回值为bool(布尔)值
    int Compare(string strA,string strB) 比较两个字符串的大小关系,返回一个整数
    int IndexOf(string value) 获取指定的value字符串在当前字符串中的第一个匹配项的位置
    int LastIndexOf(string value) 获取指定的value字符串在当前字符串中的最后一个匹配项的位置
    string Join(string separator,string[] value) 把字符串数组value中的每个字符串用来指定的分隔符separator连接,返回连接后的字符串
    string[]Split(char separator) 用指定的分隔符separator分割字符串,返回分割后的字符串数组
    string Substring(int startIndex,int length) 从指定的 位置startIndex开始检索长度为length的子字符串
    string ToLower() 获得字符串的小写形式
    string ToUpper() 获得字符串的大写形式
    string Trim() 去掉字符串前后两端多余的空格

    2、连接分割字符串

    ​ 在C#中的字符串中的连接和分割有专门的方法;连接是Join()方法,分割是Split()方法。

    splitStrings = inputString.Split(' ')//以空格作为分隔符分割字符串
    joinString = string.Join("_",splitStrings)//将分割的字符串使用下划线连接起来
    

    3、Format格式化

    ​ Format()方法允许把字符串、数字或布尔型的变量插入到格式字符串当中,它的语法和WriteLine()方法相似。语法如下:

    String MyString = String.Format("格式字符串",参数列表);
    //其中,格式字符串中包含固定文本和格式项,语法如下:
    {索引[,对齐][:格式字符串]} //在这里[]中的内容可有可无
    
    字符 说明 示例 输出结果
    C 货币格式 String.Format("{0:C3}",2000) ¥2 000.000
    D 十进制格式 String.Format("{0:D3}",2000) 2000
    F 小数点后的位数固定 String.Format("{0:F3}",2000) 2000.000
    N 用逗号隔开的数字 String.Format("{0:N}",250000) 250,000
    P 百分比计数法 String.Format("{0:P3}",0.29768) 29.768
    X 十六进制格式 String.Format("{0:X000}",12) C

    (2)类型转换

    1、简单的类型转换

    ​ (1)隐式类型转换

    ​ 对于任何数值类型A,只要其取值范围完全包含类型B的取值范围,就可以隐式转换为类型B。也就是说,int型可以隐式转换为float型或double型,float型可以隐式转换为double型。

    ​ (2)显式类型转换

    ​ 与隐式类型转换相反,当要把取值范围大的类型转换为取值范围小的类型时,就需要执行显示转换。

    double score = 58.5;//原始分数
    int bonus=5;//加分
    int sum;//总分
    sum=score+bonus;//计算总分		
    

    2、数值类型与字符串之间的转换

    (1)字符串转换为数值型

    ​ 当要把字符串转换为数值类型时,可以调用不同的数值类型的Parse()方法。例如:

    int.Parse(string);		//字符串转换为整型
    float.Parse(string);	//字符串转换为单精度浮点型
    double.Parse(string);	//字符串转换为双精度浮点型
    

    (2)数值型转化为字符串

    ​ 我们知道Parse()方法可以将字符串类型转换为数值型,其实C#中还有一个更全能的类——Convert类,它可以在各种基本类型之间执行数据类型的互相转换。Convert类为各种类型转换都提供了一个对应的方法,常用的方法如下表所示。

    ​ 1.字符串转换为数值型

    int.Parse(Console.ReadLine());  //从控制台接收整数
    int.Parse(string);   //将字符串转换成整型
    float.Parse(string);   //将字符串转换成单精度浮点型
    double.Parse(string);  //将字符串转换成双精度浮点型
    

    ​ 2.数值型转换为字符串

    int age = 18;
    string myage = age.ToString();
    

    3、使用Convert类进行转换

    方法 说明
    Convert.ToInt32() 转换为整型(int)
    Console.ToSingle() 转换成单精度浮点型(float)
    Console.ToDouble() 转换成双精度浮点型(double)
    Console.ToSting() 转换成字符串类型(String)
    展开全文
  • C#语言简介

    2018-04-22 10:49:36
    历史: C-&gt;C++-&gt;Java-&gt;C# C语言是60年代开始的,现在用处还很广泛,但是C语言不是面向对象的...由于版权的问题,后来2001年微软推出了C#语言C#语言早起和JAVA语言很相似,可以说是继承了J...

    历史:

        C->C++->Java->C#
        C语言是60年代开始的,现在用处还很广泛,但是C语言不是面向对象的,后面出现了面向对象的C++,但是C++很复杂,后来出现了JAVA,java又称为C--,它去掉了C++里面复杂的部分,自1995年创建以来,取得了比较大的成功。由于版权的问题,后来2001年微软推出了C#语言,C#语言早起和JAVA语言很相似,可以说是继承了Java的特点,当然后面C#语言取得了长足的进步,也就是我们现在用的C#语言。C#现在已经成为即C++,JAVA之后第三大面向对象语言。

    展开全文
  • C#语言的特点

    千次阅读 2018-10-12 14:49:07
    C#语言编写的源程序--------(通过C#语言编译器)------&gt;中间语言(MicroSoft Intermediate Language,简称MSIL)代码--------- -----(通过语言运行环境CLR中的即时编译器JIT)---------&gt;CPU可...

    1.C#如何在转化成CPU可执行的机器码:

    用C#语言编写的源程序--------(通过C#语言编译器)------>中间语言(MicroSoft Intermediate Language,简称MSIL)代码---------

    -----(通过语言运行环境CLR中的即时编译器JIT)--------->CPU可执行的机器码。

     


    2..NET系统包括C#、C++、VB、J#语言,他们都遵循通用语言规范(Common Language Specification,简称CLS),故都可编译成相同的中间语言代码,由CLR负责执行。只要为其他操作系统编制相应的CLR,中间语言代码也可以在其他操作系统上运行。(因此C#语言的CLR就和JAVA语言的虚拟机类似)。


    3.C#语言不支持指针。一切对内存的访问都必须通过对象的引用变量实现,只允许访问内存中允许访问的内容,防止病毒程序使用非法指针访问私有成员,也避免指针误操作产生的错误。


    4.C#中不在存在全局函数、全局变量,所有的函数、变量和常量都必须定义在类中,避免了命名冲突。

       C#语言不支持多重继承。

    展开全文
  • C# 语言历史版本特性(C# 1.0到C# 8.0汇总) 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持。微软将C#提交给标准组织ECMA...

    C# 语言历史版本特性(C# 1.0到C# 8.0汇总)

    历史版本

    C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持。微软将C#提交给标准组织ECMA,C# 5.0目前是ECMA发布的最新规范,C# 6.0还是草案阶段,C# 7.1是微软当前提供的最新规范。

    这里仅仅列个提纲,由于C# 5.0是具有ECMA标准规范的版本,所以选择C# 5.0作为主要版本学习,并专题学习C# 6.0,7.0版本新特性。

    C#语言规范GitHub库参见:https://github.com/dotnet/csharplang

    C#语言路线图及开发中的特性参见: 
    https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md

    语言版本 发布时间 .NET Framework要求 Visual Studio版本
    C# 1.0 2002.1 .NET Framework 1.0 Visual Studio .NET 2002
    C# 1.1\1.2 2003.4 .NET Framework 1.1 Visual Studio .NET 2003
    C# 2.0 2005.11 .NET Framework 2.0 Visual Studio 2005
    C# 3.0 2007.11 .NET Framework 2.0\3.0\3.5 Visual Studio 2008
    C# 4.0 2010.4 .NET Framework 4.0 Visual Studio 2010
    C# 5.0 2012.8 .NET Framework 4.5 Visual Studio 2012\2013
    C# 6.0 2015.7 .NET Framework 4.6 Visual Studio 2015
    C# 7.0 2017.3 .NET Framework 4.6.2 Visual Studio 2017
    C# 7.1 2017.6 .NET Framework Visual Studio 2017 v15.3预览版
    C# 8.0 待发布  .NET Framework 4.7.1  Visual Studio 2017 v15.7

    C# 1.0 特性

    第1个版本,编程语言最基础的特性。

    • Classes:面向对象特性,支持类类型
    • Structs:结构
    • Interfaces:接口
    • Events:事件
    • Properties:属性,类的成员,提供访问字段的灵活方法
    • Delegates:委托,一种引用类型,表示对具有特定参数列表和返回类型的方法的引用
    • Expressions,Statements,Operators:表达式、语句、操作符
    • Attributes:特性,为程序代码添加元数据或声明性信息,运行时,通过反射可以访问特性信息
    • Literals:字面值(或理解为常量值),区别常量,常量是和变量相对的

    C# 2特性 (VS 2005)

    • Generics:泛型
    • Partial types:分部类型,可以将类、结构、接口等类型定义拆分到多个文件中
    • Anonymous methods:匿名方法
    • Iterators:迭代器
    • Nullable types:可以为Null的类型,该类可以是其它值或者null
    • Getter/setter separate accessibility:属性访问控制
    • Method group conversions (delegates):方法组转换,可以将声明委托代表一组方法,隐式调用
    • Co- and Contra-variance for delegates and interfaces:委托、接口的协变和逆变
    • Static classes:静态类
    • Delegate inference:委托推断,允许将方法名直接赋给委托变量

    C# 3特性 (VS 2008)

    • Implicitly typed local variables:
    • Object and collection initializers:对象和集合初始化器
    • Auto-Implemented properties:自动属性,自动生成属性方法,声明更简洁
    • Anonymous types:匿名类型
    • Extension methods:扩展方法
    • Query expressions:查询表达式
    • Lambda expression:Lambda表达式
    • Expression trees:表达式树,以树形数据结构表示代码,是一种新数据类型
    • Partial methods:部分方法

    C# 4特性 (VS 2010)

    • Dynamic binding:动态绑定
    • Named and optional arguments:命名参数和可选参数
    • Generic co- and contravariance:泛型的协变和逆变
    • Embedded interop types (“NoPIA”):开启嵌入类型信息,增加引用COM组件程序的中立性

    C# 5特性 (VS 2012)

    • Asynchronous methods:异步方法
    • Caller info attributes:调用方信息特性,调用时访问调用者的信息

    C# 6特征 (VS 2015)

    • Compiler-as-a-service (Roslyn)
    • Import of static type members into namespace:支持仅导入类中的静态成员
    • Exception filters:异常过滤器
    • Await in catch/finally blocks:支持在catch/finally语句块使用await语句
    • Auto property initializers:自动属性初始化
    • Default values for getter-only properties:设置只读属性的默认值
    • Expression-bodied members:支持以表达式为主体的成员方法和只读属性
    • Null propagator (null-conditional operator, succinct null checking):Null条件操作符
    • String interpolation:字符串插值,产生特定格式字符串的新方法
    • nameof operator:nameof操作符,返回方法、属性、变量的名称
    • Dictionary initializer:字典初始化

    C# 7 特征 (Visual Studio 2017)

    • Out variables:out变量直接声明,例如可以out in parameter
    • Pattern matching:模式匹配,根据对象类型或者其它属性实现方法派发
    • Tuples:元组
    • Deconstruction:元组解析
    • Discards:没有命名的变量,只是占位,后面代码不需要使用其值
    • Local Functions:局部函数
    • Binary Literals:二进制字面量
    • Digit Separators:数字分隔符
    • Ref returns and locals:引用返回值和局部变量
    • Generalized async return types:async中使用泛型返回类型
    • More expression-bodied members:允许构造器、解析器、属性可以使用表达式作为body
    • Throw expressions:Throw可以在表达式中使用

    C# 7.1 特征 (Visual Studio 2017 version 15.3)

    • Async main:在main方法用async方式
    • Default expressions:引入新的字面值default
    • Reference assemblies:
    • Inferred tuple element names:
    • Pattern-matching with generics:

    C# 8.0 特征 (Visual Studio 2017 version 15.7) 

    • Default Interface Methods 缺省接口实现
    • Nullable reference type NullableReferenceTypes  非空和可控的数据类型
    • Recursive patterns 递归模式
    • Async streams  异步数据流
    • Caller expression attribute 调用方法表达式属性
    • Target-typed new
    • Generic attributes 通用属性
    • Ranges
    • Default in deconstruction
    • Relax ordering of ref and partial modifiers

    标签: C#新特性C#8.0C#版本与net framework版本对照C#历史版本

    C#5.0版本

    像C#4.0版本一样,C#5.0版本中没有太多功能 - 但是其中一个功能非常庞大。

    • 异步/等待
    • CallerInfoAttributes

    当C#5.0发布时,它实际上改变了C#开发人员编写异步代码的方式。虽然直到今天仍然有很多困惑,但我在这里向您保证,这比大多数人想象的要简单得多。这是C#的一个重大飞跃 - 它引入了一个语言级别的异步模型,它极大地赋予了开发人员编写外观和感觉同步(或者至少是连续的)的“异步”代码。

    异步编程在处理I/O绑定工作负载(如与数据库,网络,文件系统等进行交互)时非常强大。异步编程通过使用非阻塞方法帮助处理吞吐量。这种方法使用了一个透明的异步状态机中的挂点和相应的延续。

    同样,如果CPU负载计算的工作量很大,则可能需要考虑异步执行此项工作。这将有助于用户体验,因为UI线程不会被阻塞,而是可以自由地响应其他UI交互。

    编者注:这里有一些关于C#异步编程的最佳实践,使用Async Await.

    在C#5.0中,当语言添加了两个新的关键字async和await时,异步编程被简化了。这些关键字适用于Task。下表将作为参考:

    async-await

    Task表示异步操作。操作可以通过Task返回值,也可以通过Task返回void。当您使用async关键字修饰Task返回方法时,它使方法主体可以使用await关键字。当您请求await关键字的返回值时,控制流将返回给调用者,并且在方法的那个点执行暂停。当await的操作完成后,在同一点上恢复执行。部分代码如下!

    class IOBoundAsyncExample
    {
      
        private const string Url = "http://api.icndb.com/jokes/random?limitTo=[nerdy]";
     
        internal async Task GetJokeAsync()
        {
            using (var client = new HttpClient())
            {
                var response = await client.GetStringAsync(Url);
                var result = JsonConvert.DeserializeObject(response);
     
                return result.Value.Joke;
            }
        }
    }
    public class Result
    {
        [JsonProperty("type")] public string Type { get; set; }
        [JsonProperty("value")] public Value Value { get; set; }
    }
     
    public class Value
    {
        [JsonProperty("id")] public int Id { get; set; }
        [JsonProperty("joke")] public string Joke { get; set; }
    }

    我们用一个名为GetJokeAsync的方法定义一个简单的类。该方法是返回Task,这意味着我们的GetJokeAsync方法最终会给您一个字符串,或者可能出错。

    该方法使用async关键字进行修饰,该关键字允许使用等待关键字。我们实例化并使用一个HttpClient对象。然后我们调用GetStringAsync函数,它接受一个字符串url并返回一个Task 。我们等待从GetStringAsync调用返回的Task。

    当响应已经准备好时,就会继续发生并控制从我们曾经挂起的位置恢复。然后,我们将JSON反序列化到Result类的实例中,并返回Joke属性。

    一些我最喜欢的成果

    • 查克·诺里斯(Chuck Norris)可以用单一的断言来测试整个应用程序。
    • 查克·诺里斯(Chuck Norris)可以编译语法错误。
    • 项目经理永远不会要求查克·诺里斯(Chuck Norris)做出估计。

    欢闹随之而来!我们了解了C#5.0的惊人的异步编程模型。

    C#6.0版本

    C#6.0的推出有很多很大的进步,很难选择我最喜欢的功能。

    • 字典初始化
    • 异常过滤器
    • 在属性里使用Lambda表达式
    • nameof表达式
    • 空值运算符
    • 自动属性初始化
    • 静态导入
    • 字符串嵌入值

    我把范围缩小到三个突出特点:空值运算符,字符串嵌入值和nameof表达式。

    虽然nameof表达式很棒,我几乎每次都用它来编写代码,但其他两个特性更有影响力。这让我在字符串嵌入值和空值运算符之间做出决定,这是相当困难的。我决定我最喜欢的是字符串嵌入值,这就是为什么。

    空值运算符是伟大的,它允许我写较少的详细代码,但它不一定能防止我的代码中的错误。但是,使用字符串嵌入值可以防止运行时错误 - 这是我的书中的一个胜利。

    使用$符号启动字符串文字时,将启用C#中的字符串嵌入值语法。这指示C#编译器打算用各种C#变量,逻辑或表达式来插入此字符串。这是手动字符串连接甚至是string.Format方法的一个主要升级。考虑以下:

    class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    
        public override string ToString()
            => string.Format("{0} {1}", FirstName);
    }

    我们有一个简单的Person类,具有两个名称属性,用于名字和姓氏。我们重写ToString方法并使用string.Format。问题是,编译时,由于开发人员显然希望将姓氏也作为结果字符串的一部分,因此很容易出错,这一点在“{0} {1} ”参数中很明显。同样,开发人员可以很容易地交换名称或正确提供两个名称参数,但混乱的格式文字只包括第一个索引,等等...现在我们可以考虑使用字符串嵌入值。

    class Person
    {
        public string FirstName { get; set; } = "David";
        public string LastName { get; set; } = "Pine";
        public DateTime DateOfBirth { get; set; } = new DateTime(1984, 7, 7);
    
        public override string ToString()
            => $"{FirstName} {LastName} (Born {DateOfBirth:MMMM dd, yyyy})";
    }

    我冒昧添加DateOfBirth属性和一些默认的属性值。另外,我们现在在我们的ToString方法的覆盖中使用字符串嵌入值。作为一名开发人员,犯上述错误要困难得多。最后,我也可以在插值表达式中进行格式化。注意第三次嵌入值,DateOfBirth是一个DateTime - 因此我们可以使用您已经习惯的所有标准格式。只需使用:运算符来分隔变量和格式。

    示例输出

    · David Pine (Born July 7, 1984)

    编辑注:有关C#6.0新特性的详细内容,请阅读www.dotnetcurry.com/csharp/1042/csharp-6-new-features

    C#7.0版本

    从所有集成到 C# 7.0的特性中。

    • 更多的函数成员的表达式体
    • 局部函数
    • Out变量
    • 模式匹配
    • 局部变量和引用返回
    • 元组和解构

    我结束了模式匹配,元组和Out变量之间的争论。我最终选择了Out变量,这是为什么。

    模式匹配但是我真的不经常使用它,至少现在还没有。也许以后我会更多地使用它,但是对于我迄今为止编写的所有c#代码,没有太多地方可以利用它。同样,这是一个很棒的功能,我确实看到了它的位置 - 只是在C#7.0中这不是我最喜欢的。

    元组也是一个很好的补充。元组是语言的重要组成部分,成为一流的公民是非常棒的。我会说,“写tem1,.Item2,.Item3等...的日子已经过去了,但这并不一定是正确的。反序列化失去了元组的名称,使得这个公共API不那么有价值

    我也不喜欢ValueTuple类型是可变的这一事实。我只是不明白设计者的决定。我希望有人能给我解释一下,但感觉有点像疏忽。因此,我得到了选择out变量的特性。

    自从C#版本1.0以来,try-parse模式已经在各种值类型中出现了。模式如下:

    public boolean TryParse(string value, out DateTime date)
    {
        // 为了简便起见,我们省略了.....
    }

    该函数返回一个布尔值,指示给定的字符串值是否能够被解析。如果为true,则将分析的值分配给生成的输出参数date。它的使用如下:

    DateTime date;
    if (DateTime.TryParse(someDateString, out date))
    {
        //  date现在是解析值
    }
    else
    {
        // date是DateTime.MinValue,默认值
    }

    这种模式是有用的,但有点麻烦。有时,不管解析是否成功,开发人员都会采取相同的操作过程。有时使用默认值是可以的。C#7.0中的out变量使得这个更复杂,不过在我看来不那么复杂。

    示例如下:

    if (DateTime.TryParse(someDateString, out var date))
    {
        // date现在是解析值
    }
    else
    {
        // date是DateTime.MinValue,默认值
    }

    现在我们移除了if语句块的外部声明,并把声明作为参数本身的一部分。使用var是合法的,因为类型是已知的。最后,date变量的范围没有改变。它从内联声明泄漏到if块的顶部。

    你可能会问自己:“为什么这是他最喜欢的功能之一?”.....这种感觉真的没有什么变化。

    但是这改变了一切!

    它使我们的C#更具有表现力。每个人都喜欢扩展方法,对 - 请考虑以下几点:

    public static class StringExtensions
    {
        private delegate bool TryParseDelegate(string s, out T result);
    
        private static T To(string value, TryParseDelegate parse)
            => parse(value, out T result) ? result : default;
    
        public static int ToInt32(this string value)
            => To(value, int.TryParse);
    
        public static DateTime ToDateTime(this string value)
            => To(value, DateTime.TryParse);
    
        public static IPAddress ToIPAddress(this string value)
            => To(value, IPAddress.TryParse);
    
        public static TimeSpan ToTimeSpan(this string value)
            => To(value, TimeSpan.TryParse);
    }

    这个扩展方法类很简洁,表达能力强。在定义了遵循try-parse模式的私有委托之后,我们可以编写一个泛型复合函数,它需要一个泛型类型的参数、要解析的字符串值和TryParseDelegate。现在我们可以安全地依赖这些扩展方法,考虑以下几点::

    public class Program
    {
        public static void Main(string[] args)
        {
            var str =
                string.Join(
                    "",
                    new[] { "James", "Bond", " +7 " }.Select(s => s.ToInt32()));
    
            Console.WriteLine(str); // 打印 "007"
        }
    }

    编辑注:要了解C#7的所有新功能,请查看本教程www.dotnetcurry.com/csharp/1286/csharp-7-new-expected-features

    结论

    这篇文章对我个人而言颇具挑战性。我喜欢C#的许多特性,因此每次发布只收集一个最喜欢的内容是非常困难的。

    每个较新版本的C#都包含了强大而有影响力的功能。C#语言团队以无数的方式进行创新 - 其中之一就是引入点发布。在撰写本文时,C# 7.1和 7.2已正式发货。作为C#开发人员,我们生活在一个激动人心的语言时代!

    然而,对我来说,对所有这些特性进行分类是相当有见地的;因为它帮助我们了解了什么是实际的,最影响我的日常发展。一如既往,努力成为一个务实的开发者!并不是语言中所有可用的特性都是当前任务所必需的,但了解什么是可用的,这一点很重要。

    当我们期待C#8的建议和原型时,我对C#的未来感到兴奋。它看起来确实很有希望,而且语言正在积极地试图缓解“价值亿万美金的错误”。

    欢迎转载,转载请注明翻译原文出处(本文章),原文出处(原博客地址),然后谢谢观看

    如果觉得我的翻译对您有帮助,请点击推荐支持:)

    C# 6.0+VS2015:win8/win10;空值运算符,字符串嵌入值和nameof表达式。

    C# 7.0+VS2018:win10元组和解构.

    vs2018(c#8.0):正在开发中。

     

    展开全文
  • 自学C#语言基础

    千次阅读 2018-09-09 18:39:31
    自学C#语言基础 ** 所需要的开发工具: Vsiual studio 2015 1.C#是什么? C#是微软公司推出的一种语法简洁,类型安全的面向对象的编程语言。开发人员可以通过它编写在.NET Framework 上运行的各种安全可靠的应用...
  • C#语言学习思维导图

    千次阅读 多人点赞 2019-06-27 10:27:34
    C#语言学习思维导图 C#的学习可分为3个部分: (1)基础 (2)中级 (3)应用 (1)基础 (2)中级 (3)应用 ...
  • C#语言切换例程

    千次阅读 2017-04-12 16:37:49
    C#语言切换例程,很简单的实现
  • C#语言编写代码逻辑

    2017-01-19 13:39:35
    C#语言编写代码
  • 下面列出了在以前版本的 C# 语言和 Visual Studio.NET 中引入的主要功能。 1、C# 1.0 特性----第1个版本,编程语言最基础的特性,对应于Visual Studio .NET 2002 Classes:面向对象特性,支持类类型 Structs:...
  • 本文内容C# 版本历史记录C# 版本特性说明C# 7.0元组和弃元更多的 expression-bodied 成员`out`变量异步 `Main` 方法模式匹配引发表达式C# 8.0默认接口方法异步流索引和范围C# 9.0Record顶级语句模式匹配增强参考链接...
  • 利用C#语言实现小闹钟

    千次阅读 2016-11-13 12:04:38
    本图文主要是15级团队学习成果的汇报“ 利用C#语言实现小闹钟”。
  • C#语言规范

    2009-08-21 16:42:00
    MS在VS安装包中提供了一份完整的C#语言规范文档C#语言规范2.0版: 文件位于 Visual Studio 2008 安装目录下的 VC#/Specifications/2052 目录中,文件名为: C# Language Specification 2.0.doc,另外此目录下还包含有...
  • 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持。...C#语言规范GitHub库参见:https://github.com/dotnet/csharplangC#语言
  • C#语言知识汇总

    千次阅读 热门讨论 2013-05-16 17:55:09
    这段时间一直再看Asp.net的相关视频,通过天轰穿的视频,还有北大青鸟的视频,感受到了.net平台的功能强大,而.net平台的主打语言就是C#,这里先简单总结一下,C#语言的相关知识,再总结Asp.net平台上的各种知识。...
  • C# 语言—基础知识

    千次阅读 热门讨论 2017-01-19 20:56:24
    前言  最近接触到了C# 语言,感觉和最初学习VB语言时的心态不一样了,现在懂得及时...1.C#语言(C sharp),是一种最新的面向对象的编程语言。它使得程序员可以快速地编写各种基于Microsoft.NET平 台的应用程序。
  • C# 语言 和西门子S7200 smart通信

    千次阅读 2019-09-28 18:58:35
    C# 语言 和西门子S7200 smart通信 界面如截图所示,关注公众号Aidu_auto,回复软件包,获得DEMO(VS2013 C#) 支持断线重连!详细情况见软件包帮助文件。
  • C#语言 vs java语言

    千次阅读 热门讨论 2008-10-22 20:47:00
    搞了6+年的java开发,现在看C#语法的书籍,这才刚刚发现,原来C#语言比java语言难学多了,以下从几个角度去比较c#和java语言,来一次C# VS Java或者说java vs c# 1.C#从C++继承过来的东西更多一些,比如操作符重载...
  • C#语言基础理解

    千次阅读 2013-02-25 08:08:14
    学习c#视频有几天了,看完其语言基础之后,我对c#语言基础做了一个总结,来巩固所记的知识,同时希望能给你帮助。  最近一直在看c#视频,开始时看不懂,后来找师傅讨论了一下,自己重新看是有感觉,所以又重新开始...
  • C# 语言规范

    千次阅读 2008-07-18 08:21:00
    C# 语言规范的 1.2 和 2.0 版是关于 C# 语法的权威资料。它们包含该语言各个方面的详细信息,包括 Visual C# 产品文档未涉及的许多语法点。 1.2 规范讨论了在 Visual C# 2005 推出之前为该语言添加的功能,而 2.0 ...
  • 下面分别是两种语言的程序的例子。  1.Java语言的基本程序:  Import java.util.*;  Package HelloJava{  Public class Message{  Public static void main(String [] args){ ... 2.C#语言
  • C#语言学习总结

    千次阅读 2012-09-18 19:48:09
    C#语言学习总结 对于没有任何计算机基础的人来说什么是C#语言就像你拿着捡来一片破布问程序员是什么材质一样令人费解!要想了解C#(sharp)首先让我教你点基础,  曾经有个外语系的女童鞋和我聊天时聊到这语言 她:...
  • C# 语言和 .NET Framework 介绍

    千次阅读 2015-08-14 16:27:32
    C# 语言和 .NET Framework 介绍
  • C#语言简介/开发环境及资料下载

    千次阅读 2020-07-02 10:23:19
    C#语言简介/开发环境什么是程序(Program)为什么需要程序程序语言的选择开发环境安装Visual Studio学习资料 什么是程序(Program) 计算机程序或者软件程序(通常简称程序)是指一组指示计算机每一步动作的指令,与...
  • C# 语言基础学习路线图

    千次阅读 2019-05-28 14:09:00
    一直以来,对于很多知识点都是存于...就从C# 语言基础开始,如下图所示,内容会逐渐增加和变动(发现相关的东西有新的认识也会更新上来) 希望自己能坚持下来! 转载于:https://www.cnblogs.com/home-wang/p/1093...
  • 说说C#语言的开发环境的搭建

    千次阅读 2018-10-01 22:55:16
    C#语言是一门面向对象的编程语言,是微软公司在吸收了C++语言、Java语言的优点的基础上,创建的一门更加优秀的编程语言。 在实际的学习中,我们总是会不得不面对一个C#语言的集成开发环境的选择问题。可以使用的...
  • C#语言粗浅认识和C#语言与Java的区别

    千次阅读 2006-10-24 23:33:00
    C#语言是一门出现最晚,最新的软件开发语言,C#是为.NET量身定做的,也是依靠.NET Framework的支持,因此C#在.NET上运行的速度是最快的.现在的软件开发语言有很多,怎么样才算是一个好的语言呢?看一门语言是否是一门好...
  • C#语言主要特性

    2011-10-20 19:59:20
    C#语言主要特性 一、委托和事件 委托相当于JAVA里面的方法回调,而事件是依赖于委托特性的一种应用模式,广泛应用于事件驱动型的编程,委托和事件都是语言层面而设计的,就像JAVA的安全机制一样,充分体现了...
  • C#语言入门学习笔记

    千次阅读 2012-02-14 14:10:23
    C#语言入门学习笔记   一、C#是什么 C#(读作“C sharp”)是一种编程语言,它是为生成在 .NET Framework 上运行的各种应用程序而设计的。 C# 简单、功能强大、类型安全,而且是面向对象的。 C# 凭借在许多方面...
  • C#语言中string格式转json格式

    千次阅读 2019-10-10 15:19:37
    C#语言中string格式转json格式 在C# 编写中发现获取到的string字符串转换成json字符串更容易读取,因此就实验了一下怎么转换成json格式,如获取到的字符串如下图所示,我们现在想读取list中的数据,怎么读呢。 首先...
  • 最近在用unity3d做毕业设计,毕业设计中,需要有一个灯一直闪烁。大概1秒1次左右。请问如何用C#语言进行编程使这个物体闪烁,求脚本。谢谢。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,496
精华内容 27,398
关键字:

c#语言

c# 订阅