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

为什么{get; set;}访问器没有初始值(VS 2010 C#)

在VS 2010 C#中,{get; set;}访问器没有初始值是因为C#编译器默认会为自动属性的访问器生成一个私有的后备字段,该字段用于存储属性的值。这个后备字段的初始值由编译器自动分配,通常为属性类型的默认值。

在自动属性中,我们可以省略后备字段的定义,直接使用{get; set;}访问器来定义属性。这样做的好处是简化了代码,减少了冗余的代码量。

然而,由于编译器自动生成的后备字段是私有的,并且没有初始值,所以在使用自动属性时,如果没有显式地给属性赋初始值,那么属性的初始值将为其类型的默认值。例如,对于整型属性,初始值为0;对于字符串属性,初始值为null。

需要注意的是,如果我们在属性定义时显式地给属性赋初始值,那么这个初始值将会覆盖类型的默认值。例如:

代码语言:csharp
复制
public int MyProperty { get; set; } = 10;

在上述代码中,MyProperty属性的初始值被显式地设置为10,而不是默认的0。

总结起来,{get; set;}访问器没有初始值是因为C#编译器会为自动属性生成一个私有的后备字段,该字段没有初始值,而属性的初始值由属性类型的默认值决定。如果需要给属性赋初始值,可以在属性定义时显式地进行赋值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

值得 .NET 开发者了解的15个特性

成员的默认值通常是其初始值。 这个属性不能用于使用特定的值自动初始化对象成员。因此,开发者必须在代码中设置初始值。...; set; } [DefaultValue("Anton")] public string FirstName { get; set; } [DefaultValue("Angelov...")] public string LastName { get; set; } public override string ToString() { return...WeakReference 弱引用使得在收集收集对象时,仍允许应用程序访问该对象。如果你需要这个对象,你仍然可以获得一个强有力的引用,并阻止它被收集。....110).aspx 9.没有官方文档的C#关键字 (__arglist / __reftype / __makeref / __refvalue) 一些 C# 关键字是没有官方文档的,没有文档的原因可能是这些关键字没有经过充分测试

93190

C# 面向对象编程进阶:构造函数详解与访问修饰符应用

它可以用于为字段设置初始值: 示例 获取您自己的 C# 服务 创建一个构造函数: // 创建一个 Car 类 class Car { public string model; // 创建一个字段...所有类默认都有构造函数:如果您自己不创建类构造函数,C# 会为您创建一个。然而,这样您就无法为字段设置初始值。 构造函数参数 构造函数还可以接受参数,用于初始化字段。...string year; // private } C# 属性(GetSet) 在开始解释属性之前,您应该对“封装”有一个基本的了解。...要实现这一点,您必须: 将字段/变量声明为 private 通过属性提供 public getset 方法来访问和更新 private 字段的值 属性 private 变量只能在同一类中访问(外部类无法访问它...唯一的区别是代码更少: 示例 class Person { public string Name // 属性 { get; set; } } 为什么要封装?

13410

带你了解C#每个版本新特性

在C#1中声明属性,属性中的getset访问级别是和属性一致,要么都是public要么都是private,如果要实现getset有不同的访问级别,则需要用一种变通的方式,自己写GetXXX和SetXXX...在C#2中可以单独设置getset访问级别,如下: private string _name; public string Name { get { return _name; }...private set { _name = value; } } 需要注意的是,不能讲属性设置为私有的,而将其中的get或是set设置成公有的,也不能给setget设置相同的访问级别,当setget...怎样只让部分程序集访问,就要使用友元程序集了,具体参考之前的博文《C#:友元程序集(http://blog.fwhyy.com/2010/11/csharp-a-friend-assembly/)》 可空类型...C#4.0 C# VS版本 CLR版本 .NET Framework 4.0 VS2010 4.0 4.0 可选参数 VB在很早就已经支持了可选参数,而C#知道4了才支持,顾名思义,可选参数就是一些参数可以是可选的

3.5K20

精:C#历来版本特性一览

】 迭代【yield return 语句】 协变和逆变【这时候还不支持泛型接口和委托】 getter/setter 单独可访问性 静态类 C# 3.0 发布日期:2007 年 11 月 C# 3.0...自动实现的属性【{ get; set; } 写法】 匿名类型【new { Foo = 108, Bar = "Hello" } 写法】 查询表达式【from foo select bar where baz...Foo { Bar = "Hello" } 写法】 WPF、WCF、WF C# 4.0 发布日期:2010 年 4 月 C# 版本 4.0 随 Visual Studio 2010 一起发布,引入了一些小改进...异常筛选【catch (ExceptionType [e]) when (expr)】 自动属性初始化表达式【public string Foo { get; set; } = string.Empty...【继续增强……】 函数指针【图穷匕见,高性能计算这一块与我似乎没有交集】 后面懒得列了…… C# 10 发布日期:2021 年 11 月 C# 10 继续致力于删除不必要的模式、将数据与算法分离以及提高

15120

C#历来语法特性总结

匿名函数 匿名函数是C# 2推出的功能,顾名思义,匿名函数只有方法体,没有名称。匿名函数使用delegate创建,可转换为委托。...编译时,编译会为其创建一个仅可以通过getset访问访问的私有、匿名字段。使用VS开发时,可以通过snippet代码片段prop+2次tab快速生成自动属性。...; } } // 自动属性 public string Name { get; set; } 另外,在C# 6以后,可以初始化自动属性: public string Name { get; set;...public class Person { // 自动属性 public int Age { get; set; } public string Name { get; set;...; set; } = "Property"; } 表达式体 从C# 6起,支持方法、运算符和只读属性的表达式体定义,自C# 7.0起,支持构造函数、终结、属性、索引的表达式体定义。

36840

Visual Studio Code安装C#开发工具包并编写ASP.NET Core Web应用

前言   前段时间微软发布了适用于VS Code的C#开发工具包(注意目前该包还属于预发布状态但是可以正常使用),因为之前看过网上的一些使用VS Code搭建.NET Core环境的教程看着还挺复杂的就一直没有尝试使用...不过听说C# 开发工具包提供了一系列功能和扩展,从而极大的提高了VS Code中编写、调试和管理 C# 代码的体验。看到这个今天就不得不上手实战一下看看到底有没有官网描述的这么好用。...它与 C# 扩展协同工作,该扩展已更新为由新的完全开源的语言服务协议 (LSP) 主机提供支持,打造了一个高性能、可扩展且灵活的工具环境,可以轻松地将新体验整合到适用于 VS Code 的 C# 中。...; set; }     public string Sex { getset; }     public int Age { getset; }     public int Number {... getset; } } 后端用户信息赋值     public IActionResult Index()     {         List userInfoList =

57220

C#3.0新增功能06 对象和集合初始值设定项

使用 C# 可以在单条语句中实例化对象或集合并执行成员分配。 对象初始值设定项 使用对象初始值设定项,你可以在创建对象时向对象的任何可访问字段或属性分配值,而无需调用后跟赋值语句行的构造函数。...public class Cat { public int Age { get; set; } public string Name { get; set; } public...从 C# 6 开始,除了分配字段和属性外,对象初始值设定项还可以设置索引。...0.0, [1, 1] = 1.0, [1, 2] = 0.0, [2, 0] = 0.0, [2, 1] = 0.0, [2, 2] = 1.0, }; 包含可访问资源库的任何可访问索引都可以用作对象初始值设定项中的表达式之一...元素初始值设定项可以是简单的值、表达式或对象初始值设定项。 通过使用集合初始值设定项,无需指定多个调用;编译将自动添加这些调用。

86810

C# 6.0中你不知道的新特性

为什么写? 今天去上班的公交上,有朋友在张队(张善友)的微信群里,发了一个介绍C# 6.0新特性的视频,视频7分钟,加上本人英语实在太low,整体看下来是一脸懵逼的。...在C# 6.0中并没有加入什么需要费大力思考才能用上的新概念,相反,而是提供了一些小而实用的新功能,可以帮助我们清理代码、提供样板,让我们的目的更加清晰。...1.Getter 专属自动特性 之前自动属性必须具有set ,这将对不可变变量不利,因此C# 6.0中允许了只有get的自动属性,编译将识别这种属性为只读属性,即使没有set是我们还是可以从构造函数中给属性赋值...,这个赋值过程时没有set也是可以实现的,它是直接分配到支持的字段,以便对其进行初始化。...学到在这里,我们可以这样编写整个代码,一个表达式和一个箭头,一个get关键字都没有,这样压缩代码使得代码更加紧凑。

92340

C#移动跨平台开发(1)环境准备

C#依托于mono平台可以实现Unix平台服务端开发已经不是什么新鲜事了,而Xarmain公司(初始成员大多来自原Mono、MonoTouch、Mono For Android成员)继续将C#的先进性带到了移动平台...在@gjun的提醒下,我总算找到了为什么向导式安装(XamarinInstaller.exe)安装会失败了,原来也是因为“墙”的原因。...对应上面的三个图标,分别安装的是: Andsord SDK以及相关工具 Xamarin Studio Xamarin.Android VS 插件( VS2010VS2012现在完成支持,VS2013...这里下载过程中,对于一个信息安全工作做的非常好的国家,会出来一些问题:    对于这个问题,你可以找一些IP地址,修改HOST文件来访问google,但是也不是很稳定。...进入VS-> TOOLS-> Options 在左侧选择“Xamarin”->"Android Settings" 第一步大功告成,我们马上就要开始用C#开发我们的第一个Android以及IOS

1.9K70

VS集成的若干种代码生成解决方案

T4直接包含在VS2008和VS2010中,是一个基于文本文件转换的工具包。...但是这种方式对于VS 2010则行不通,因为T4引擎在解析和编译模板的时候并不会从项目引用列表中去定位目标程序集。...本篇文章为你介绍在VS2010下5种不同的程序集引用的方式……[ 阅读全文] [第7篇] 编写T4模板进行代码生成无法避免的两个话题:"Assembly Locking"&"Debug" 出于提高性能考虑...VS和一些T4编辑虽然给了基本的智能感知支持,但是在绝大部分我们相当于在编写纯文本的脚本,所以对于一些比较复杂的模板转换逻辑,我们需要通过Debug的方式去发现一些无法避免的问题……[阅读全文] [第...当你创建一个.aspx文件的时候,为什么会自动创建对应源代码?当你在该.aspx页面中以XML的方式添加一个按钮,源代码中为什么会自动添加一个同名的属性。

2.6K90

C#7.3 新增功能

以下新增功能支持使安全代码获得更好的性能的主题: 无需固定即可访问固定的字段。 可以重新分配 ref 本地变量。 可以使用 stackalloc 数组上的初始值设定项。...01 启用更高效的安全代码 你应能够安全地编写性能与不安全代码一样好的 C# 代码。 安全代码可避免错误类,例如缓冲区溢出、杂散指针和其他内存访问错误。 这些新功能扩展了可验证安全代码的功能。...set; } 属性 SomeThingAboutFieldAttribute 应用于编译生成的 SomeProperty 的支持字段。...2.4 扩展初始值设定项中的表达式变量 已对在 C# 7.0 中添加的允许 out 变量声明的语法进行了扩展,以包含字段初始值设定项、属性初始值设定项、构造函数初始值设定项和查询子句。...如果方法在含有实例接收的情况下被调用,则编译将丢弃静态成员。 在没有接收时,编译将仅添加静态上下文中的静态成员,否则,将同时添加静态成员和实例成员。

1.6K10

Visual Studio 2015速递(1)——C#6.0新特性怎么用

VS2003我已经基本没有太深的印象了,仅仅留在记忆里的是这货要高效率,必须得安装一个叫Resharper的玩意,否则也就比记事本强那么一点点;随后微软发布了VS2005和VS2008,增加了MSBUILD...引擎,优化智能提示,改进扩展模型,基本上算是成熟稳健了;之后在WPF技术上创建的VS2010一直给人臃肿华丽的印象,但是缺乏让人眼前一亮的重磅功能;最近的两次升级和发布是VS2012和VS2013,其中摆在头条的几个重大点不是性能就是...Studio 2015正式发布日期是7月20日,这在开发部迅速展开讨论,大抵分成三派: 技术流——我去,这IDE来来去去不就是那么些功能么,各种超级“记事本”就能搞定的事情,何必挣破头去升级,只要技术没有换代...最终还是追新流声音比较大,因为大家都对C#的新版本很期待,虽然微软C#语言组的PM Mads Torgersen说过,“C# 6.0主要是增强和提升效率”,但是对于控件开发小组而言依然相当期待,因为代码的可读性和效率是我们非常关键的部分...public string FirstName { get; set; } = “John”; public string LastName { get; set; } = “Lennon

70580
领券