首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# 发展历史及版本新功能介绍

无需修改 Visual Studio 创建文件,就可创建使用这些类代码。...可通过使用 new 运算符和对象初始值创建匿名类型。 有关对象初始值设定详细信息,请参阅对象和集合初始值设定。...这两种技术都可与方法、索引器、构造函数委托一起使用。 使用命名参数和可选参数时,将按实参出现在实参列表(而不是形参列表)中顺序计算这些实参。...以下介绍了部分功能: 静态导入 异常筛选器 属性初始值设定 Expression bodied 成员 Null 传播器 字符串内插 nameof 运算符 字典初始值设定 这些功能每一个都很有趣。...第一个版本很简单:编译器和标准库一起提供,且各自都只有一个版本。 后续版本 C# 偶尔会向依赖添加新类型或成员

4.2K20

C#6.0 新增功能

属性只能在构造函数主体中设置; 尝试在另一种普通方法中设置 LastName 会生成 CS0200 编译错误: ?...具有 null 条件运算符成员函数最常见用法是用于安全地调用可能为 null 委托(或事件处理程序)。 通过使用 ?. 运算符调用委托 Invoke 方法来访问成员。...鉴于此行为,建议仔细编写 catch 和 finally 子句,避免引入新异常。 10 使用索引器初始化关联集合 索引初始值设定是提高集合初始值设定与索引用途一致性两个功能之一。...在早期版本 C# 中,可以将集合初始值设定用于序列样式集合,包括在键值周围添加括号而得到 Dictionary: private Dictionary<int, string...11 集合初始值设定扩展 Add 方法 使集合初始化更容易另一个功能是 Add 方法使用扩展方法。 添加此功能目的是进行 Visual Basic 奇偶校验。

1.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

C#7.3 新增功能

1.3 stackalloc 数组支持初始值设定 当你对数组中元素值进行初始值设定时,你已能够指定该值: var arr = new int[3] {1, 2, 3}; var arr2 = new...2.4 扩展初始值设定表达式变量 已对在 C# 7.0 中添加允许 out 变量声明语法进行了扩展,以包含字段初始值设定、属性初始值设定构造函数初始值设定和查询子句。...此版本添加了三个新规则,以帮助编译器选取明显选择: 当方法组同时包含实例和静态成员时,如果方法在不含实例接收器或上下文情况下被调用,则编译器将丢弃实例成员。...如果方法在含有实例接收器情况下被调用,则编译器将丢弃静态成员。 在没有接收器时,编译器将仅添加静态上下文中静态成员,否则,将同时添加静态成员和实例成员。...静态上下文(其中隐式 this 实例接收器无法使用)包含未定义 this 成员正文(例如,静态成员),以及不能使用 this 位置(例如,字段初始值设定构造函数初始值设定)。

1.6K10

C#各版本新增加功能(系列文章)

目前提供以下功能可供试用: Readonly 成员 默认接口成员【*重要,突破性变革*】请参考:C#8.0 中使用默认接口成员更新接口 模式匹配增强功能:Using 声明 Switch 表达式 属性模式...C# 编译器现在是用 C# 编写,你可以使用编译器作为编程工作一部分。...C#5.0 新增功能01 异步编程 C#5.0 新增功能02 调用方信息 C# 4.0 C# 4.0 版和 Visual Studio 2010 一起发布于 2010 年4月,对应 .NET Framework...C#3.0 新增功能06 对象和集合初始值设定 C#3.0 新增功能07 查询表达式 C#3.0 新增功能08 Lambda表达式 C#3.0 新增功能09 LINQ 基础01 语言集成查询...# 1.2 随 Visual Studio 2003 一起提供 C# 版本 1.2。

1.8K10

【C++】构造函数初始化列表 ① ( 类对象作为成员变量时构造函数问题 | 构造函数初始化列表语法规则 )

; 此时使用 默认无参构造函数 初始化 B , 就会报错 ; 在一个类中 , 其成员变量是 带有参构造函数 类型 , 这种情况下没有调用 有参构造函数机会 , 此时就会出现 编译报错情况 ; 在下面的代码中..._Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(22): message : 编译器已在此处生成“B::B” 1>D:\002_Project\...”不具备相应 默认构造函数 或重载解决不明确,因此已隐式删除函数 1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp...是一种用于初始化类成员变量方法 ; 构造函数初始化列表 可实现功能 : 为成员变量提供初始值 调用其他 成员变量 构造函数 来初始化成员变量 构造函数初始化列表语法规则 : 构造函数() : 成员变量名称...(10) 是 为 m_age 提供了初始值 ; m_a(10, 150) 是 调用了 A 有参构造函数 ; 代码示例 : class B { public: B() : m_age(10) , m_a

48530

第7章 类

而如果想要声明常量成员函数,就在参数列表后面加上 const,表示 this指针是一个指向常量指针。常量对象、引用即指针都只能调用成员函数编译器首先编译成员声明,然后才轮到函数体。...合成默认构造函数可能执行错误操作。当默认初始化类内置类型数据成员时,如果在类内没有初始值,则执行默认初始化后这些成员变量值是未定义。...C++11新标准中,可以通过在参数列表后面写上=default来要求编译器生成默认构造函数。 当某个数据成员构造函数初始值列表忽略时,它将以与合成默认构造函数相同方式隐式初始化。...委托构造函数,使用它所属类其他构造函数执行它自己初始化过程,或者说把自己一些(或全部)职责委托给了其他构造函数。形式如下,注意成员初始值列表中只能有一个唯一入口,就是类名本身。...构造函数存在委托关系时,程序执行顺序:受委托构造函数初始值列表和函数体被依次执行,先执行完受委托构造函数函数体后,控制权才会交还给委托构造函数函数体。

82640

C#规范整理·泛型委托事件

where T:class 指定参数具有无参数公共构造方法。where T:new() 注意,CLR目前只支持无参构造方法约束。 指定参数必须是指定基类,或者派生自指定基类。...T t=0; return t; } 代码"T t=null;"在Visual Studio编译器中会警示:错误1不能将Null转换为类型形参“T”,因为它可能是不可以为null...8.了解委托本质# 理解C#中委托需要把握两个要点: 委托是方法指针。 委托是一个类,当其进行实例化时候,要将引用方法作为它构造方法参数。...9.使用event关键字为委托施加保护# 首先没有event加持委托,我们可以对它随时进行修改赋值,以至于一个方法改动了另一个方法委托链引用,比如赋值为null,另外一个方法中调用时候将抛出异常。...编译器对于接口和委托类型参数检查是非常严格,除非用关键字out特别声明,不然这段代码只会编译失败。

21930

【笔记】《C++Primer》—— 第7章:类

这个写法一个用处在于我们无法在常量对象上调用普通成员函数,所以要用常量成员函数代替 编译类时,编译器先编译完成员声明,然后再回来编译成员函数体,因此成员函数可以无视顺序使用成员 当要返回当前对象时...const,当创建const对象时,对象是在构造初始化完成后(执行构造函数体前瞬间)获得const属性 当没有任何构造函数编译器会默认生成一个构造函数,初始化(值初始化,默认构造或用初始值赋值)类内各种成员...在构造函数函数体间用冒号连接一段以逗号分隔调用串,调用名为函数成员,即为构造函数初始值列表,可以很方便地在函数体是空时完成构造函数赋值且如随后将要提到,此方法有时必不可少 ?...C11增加了“委托构造函数”,即我们可以简化之前重载多个类似的构造函数代码,我们可以在构造函数初始值列中调用委托构造函数了 ?...对于委托构造函数函数体,委托者会依次执行被委托函数函数体,完成初始化后才执行自己函数体 想使用默认构造函数时,方法是初始化对象时不使用后面的调用运算符(即小括号),如直接写Test a; 当构造函数只接受一个实参时

59220

Visual C++ 中重大更改

早期版本编译器生成了匿名联合显式构造函数和析构函数。 这些在 Visual Studio 2015 中 Visual C++ 中已删除。           ...创建此类联合时,将不再隐式调用联合中匿名结构成员构造函数。 此外,联合超出范围时,不再隐式调用联合中匿名结构成员析构函数。...\n");     gets_s(s);     return 0; }           在 Visual Studio 2013 中 Visual C++ 中,创建联合时会调用 S 构造函数,...但在 Visual Studio 2015 中 Visual C++ 中,不会调用构造函数和析构函数编译器会对关于此行为更改发出警告。           ...复制构造函数Visual Studio 2013 和 Visual Studio 2015 RC 中,如果该类具有用户定义移动构造函数,但没有用户定义复制构造函数,则编译器生成类复制构造函数

4.7K00

Visual C++ 中重大更改

早期版本编译器生成了匿名联合显式构造函数和析构函数。 这些在 Visual Studio 2015 中 Visual C++ 中已删除。           ...创建此类联合时,将不再隐式调用联合中匿名结构成员构造函数。 此外,联合超出范围时,不再隐式调用联合中匿名结构成员析构函数。...\n");     gets_s(s);     return 0; }           在 Visual Studio 2013 中 Visual C++ 中,创建联合时会调用 S 构造函数,...但在 Visual Studio 2015 中 Visual C++ 中,不会调用构造函数和析构函数编译器会对关于此行为更改发出警告。           ...复制构造函数Visual Studio 2013 和 Visual Studio 2015 RC 中,如果该类具有用户定义移动构造函数,但没有用户定义复制构造函数,则编译器生成类复制构造函数

5.1K10

【译】C# 11 特性早期预览

您可以更新 Visual Studio 或下载最新 .NET SDK 来获得这些功能。 查看帖子 Visual Studio 2022 17.1 现已推出!...生成空值检查将在方法中任何代码之前执行。对于构造函数,空值检查发生在字段初始化、调用构造函数调用 this 构造函数之前。 此功能独立于可空引用类型 (NRT),尽管它们可以很好地协同工作。...调用方法时会发生空值检查。 该语法迭代器方法参数也有效。调用迭代器方法时会发生空值检查,而不是遍历底层枚举器时。...您显式验证发生在使用 this 调用字段初始值设定、基类构造函数构造函数之后。使用参数空检查语法执行空检查将在任何这些执行之前发生。...总结 Visual Studio 17.1 和 .NET SDK 6.0.200 提供了 C# 11 早期了解。您可以在插值字符串花括号(孔)内使用参数空检查、列表模式和新行。

1.7K60

C# 6.0中你不知道新特性

1.Getter 专属自动特性 之前自动属性必须具有set ,这将对不可变变量不利,因此C# 6.0中允许了只有get自动属性,编译器将识别这种属性为只读属性,即使没有set是我们还是可以从构造函数中给属性赋值...C# 6.0中引入一种新using子句,它是引用类型,而非命名空间,这样可以把该类型静态成员直接放入作用域中,例如在上一个例子中我们要使用Sqrt函数,我们必须添加math前缀,才能调用Sqrt(...Dist => Sqrt(X * X + Y * Y); public override string ToString() => $"({X},{Y})"; } } 5.索引初始值设定...,通过上述方法可以初始化对象初始值设置属性。...Null条件运算符触发时间非常有用,如 OnChanged?.Invoke(this,arg) 而不用在单独去判断委托是否为空,当委托不为空时,执行右边Invoke()方法。

91840

《C++Primer》第七章 类

原因有三个: 只有在类没有声明任何构造函数时,编译器才会自动地生成默认构造函数,一旦我们定义了一些其他构造函数,那么除非我们再定义一个默认构造函数,否则类将没有默认构造函数。...对于某些类,合成默认构造函数可能执行错误操作:如果定义在块中内置类型或符合类型(比如数组和指针)对象被默认初始化,则它们值可能是未定义。...编译器可能不能为某些类合成默认构造函数:如果类中包含一个其他类类型成员并且这个成员类型没有默认构造函数,那么编译器无法初始化该成员。...int i; const int ci; int &ri; } // 我们初始化const或者引用类型数据成员唯一机会是通过构造函数初始值 ConstRef::ConstRef(int...委托构造函数 C++11新标准使我们可以定义委托构造函数,使用它所属类其他构造函数执行它初始化过程。

53620

连接器工具错误lnk2019_2019年十大语文错误

32位代码,或将32位库链接到64代码 13.将不同编译器选项用于不同源文件中函数内联 14.在其作用域外使用自动变量 15.调用内部函数或将参数类型传递到目标体系结构不支持内部函数 16.混合使用本机代码...:::no-loc(wchar_t):::类型定义不一致 其他资源 已编译函数函数符号进行引用或调用,但是链接器在要链接任何库或对象文件中都找不到符号定义。...:::no-loc(static):::未定义类成员 :::no-loc(static):::类成员必须具有唯一定义,否则它将违反单个定义规则。...9.生成依赖仅在解决方案中定义为项目依赖Visual Studio 早期版本中,此级别的依赖已经足够。...但是,从 Visual Studio 2010 开始,Visual Studio 需要一个项目到项目的引用。 如果你项目没有项目到项目的引用,则可能会收到此链接器错误

4.1K20

C# 12 中新增八大功能你都知道吗?

一、主构造函数Visual Studio 2022 版本 17.6 预览版 2 中引入。 从 C# 12 开始,可以在类和结构中声明主构造函数。主构造函数参数都在类整个主体范围内。...为了确保显式分配所有主构造函数参数,所有显式声明构造函数都必须使用 this() 语法调用构造函数。将主构造函数添加到 class 可防止编译器声明隐式无参数构造函数。...在 struct 中,隐式无参数构造函数初始化所有字段,包括 0 位模式构造函数参数。 主构造函数参数最常见用途包括: 作为 base() 构造函数调用参数。 初始化成员字段或属性。...引用实例成员构造函数参数。...拦截器是一种方法,该方法可以在编译时以声明方式将对可拦截方法调用替换为其自身调用。通过让拦截器声明所拦截调用源位置,可以进行这种替换。

17310

C#3.0新增功能09 LINQ 基础08 支持 LINQ C# 功能

在编译时,查询语法转换为 LINQ 提供程序标准查询运算符扩展方法实现方法调用。 应用程序通过使用 using 指令指定适当命名空间来控制范围内标准查询运算符。...对象和集合初始值设定 通过对象和集合初始值设定,初始化对象时无需为对象显式调用构造函数初始值设定通常用在将源数据投影到新数据类型查询表达式中。...(y => new Customer { Name = y.Name, Phone = y.Phone }); 匿名类型 匿名类型由编译器构造,且类型名称只可用于编译器。...使用新表达式和对象初始值设定初始化匿名类型,如下所示: select new {name = cust.Name, phone = cust.Phone}; 有关详细信息,请参阅匿名类型。...Lambda 表达式 Lambda 表达式是一种内联函数,该函数使用 => 运算符将输入参数与函数体分离,并且可以在编译时转换为委托或表达式树。

1.9K30

认真理一理C++构造函数

如何使用构造函数 什么是委托构造函数? 如何禁止拷贝形式初始化? 前言 我们在C语言中使用堆栈中变量时,常常需要给它赋初始值,用于避免使用到了不可预知值。...构造函数没有返回值 构造函数名与类名相同 构造函数可以重载 构造函数不能被声明成const 构造函数返回值我们是拿不到,因而其返回值我们来说也是没有意义。...如果类中某个成员它自己没有默认构造函数(无参构造函数),那么编译器也就不能合成默认构造函数。...但是不幸编译器报错了: no matching function for call to ‘Foo::Foo()’ 也就是说,它试图去调用自己成员无参构造函数,但是由于成员自己没有,所以报错了。...,可以使用拷贝形式初始化 类中某个成员它自己没有默认构造函数(无参构造函数),那么编译器也就无法合成默认构造函数 如果定义了自己构造函数编译器将不会合成默认构造函数 对于有const或者引用成员变量

53420

【C++】构造函数初始化列表 ③ ( 构造函数 初始化列表 中 为 const 成员变量初始化 )

构造函数初始化列表 总结 : 初始化列表 可以 为 类 成员变量 提供初始值 ; 初始化列表 可以 调用 成员变量 类型 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...中传入 参数 ; 类初始化时 , 根据定义顺序 , 先调用 成员变量 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 const 成员变量 必须只能在 初始化列表 中进行...进行赋值 , 因此 这里 必须在 构造函数 初始化列表中 const 成员变量 进行赋值 ; 2、错误代码示例 - 没有初始化常量成员 在下面的 类 B 中 , 定义了常量 const int..., 常量成员 进行初始化操作 ; 3、正确代码示例 - 在初始化列表中初始化常量成员 在下面的 类 B 中 , 所有的 构造函数 中 , 都要使用 初始化列表 初始化 常量成员 , 只要遗漏一个构造函数...执行 B 析构函数 执行 A 析构函数 D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\Debug\HelloWorld.exe (进程

17930

【深入浅出C#】章节 1: C#入门介绍:C#历史和发展

借助强大IDE工具(如Microsoft Visual Studio),开发者可以进行代码编辑、调试、自动完成和重构等操作,提高开发效率。...,使用try-catch-finally块;垃圾回收机制,自动管理内存;事件和委托,用于处理事件和回调;以及属性,提供成员访问和修改。...3.6 C# 6.0 - C# 10.0 以下是C# 6.0至C# 10.0版本中一些主要新增功能和语言改进: C# 6.0: 使用await表达式catch和finally块 自动属性初始值设定...异常过滤器在catch块中使用 字符串插值(String Interpolation) 空条件运算符(Null-Conditional Operator) nameof表达式 函数成员自动属性初始值设定...索引初始值设定 C# 7.0: 异步主方法(Async Main) 元组扩展和命名成员 Pattern Matching(模式匹配) Out变量声明 本地函数 Throw表达式 Ref locals

83220

代码质量规则

CA1012:抽象类型不应具有构造函数 抽象类型构造函数只能由派生类型调用。 由于公共构造函数用于创建类型实例,但无法为抽象类型创建实例,因此具有公共构造函数抽象类在设计上是错误。...避免使用带有前缀 cref 标记,因为它会阻止编译器验证引用。 它还会阻止 Visual Studio 集成开发环境 (IDE) 在重构过程中查找和更新这些符号引用。...CA1810:以内联方式初始化引用类型静态字段 当一个类型声明显式静态构造函数时,实时 (JIT) 编译器会向该类型每个静态方法和实例构造函数中添加一检查,以确保之前已调用该静态构造函数。...CA2244:不要复制已索引元素初始值设定 对象初始值设定有多个具有相同常量索引索引元素初始值设定。 除最后一个初始值设定之外,其余都是冗余。...CA2255:不应在库中使用 ModuleInitializer 属性 模块初始值设定旨在由应用程序代码使用,以确保在应用程序代码开始执行之前初始化应用程序组件。

2.1K30
领券