在 C# 中声明并初始化只读自动属性
介绍
C# 的第 6 版于 2015 年与 Visual Studio Ultimate 一起发布,实现了一项独特的功能:只读自动属性,有时也称为仅 getter 自动属性。在本指南中,我们将介绍字段和属性的概念,并了解两者如何只读以及如何实现它们,同时重点关注自动属性方面。我们还将了解这一新功能如何为开发人员提供更多方法来克服问题和挑战。
字段与属性
这两个概念都围绕着抽象的概念。有了类,你就可以拥有字段和属性。字段是普通的变量成员。属性是允许你获取甚至设置其值的抽象。
让我们看一个字段的例子。我们有一个包含两个成员的服务器ServerFieldDemo类。
public class ServerFieldDemo
{
private string _Name;
private string _Function;
public ServerFieldDemo(string name, string function){
this._Function = function;
this._Name = name;
}
}
定义字段时,应确保将其定义为私有,因为这可确保您不会违反封装的概念。简而言之,封装意味着您将字段或数据与能够操作它们的方法和函数捆绑在一起,而无需将它们暴露出来以供直接操作。当前代码还不够,因为它无法检索这些成员。
为了给我们的类注入属性(也称为访问器),请按照以下方式修改该类。
public class ServerFieldDemo
{
private string _Name;
private string _Function;
public string Name { get { return _Name; } set {_Name = value; } }
public string Function { get { return _Function; } set { _Function = value; } }
public ServerFieldDemo(string name, string function){
this._Function = function;
this._Name = name;
}
}
现在您可以选择读取和修改属性。调用代码。
ServerFieldDemo a = new ServerFieldDemo("pikkolo", "Domain Controller");
Console.WriteLine($"The name is: {a.Name} and function is: {a.Function}");
a.Name = "songoku";
a.Function = "DNS Server";
Console.WriteLine($"The name is: {a.Name} and function is: {a.Function}");
执行后您应该会看到以下输出。
he name is: pikkolo and function is: Domain Controller
The name is: songoku and function is: DNS Server
您已在构造函数的帮助下初始化了类,并在属性访问器的帮助下更改了字段。您还遵守了封装原则。现在您已经澄清了概念,请用只读方面来增添趣味。
要创建只读字段,请在定义中使用readonly关键字。
public class ServerFieldDemo
{
readonly string _Name;
readonly string _Function;
public ServerFieldDemo(string name, string function){
this._Function = function;
this._Name = name;
}
}
对于字段成员,您只有一次机会用值初始化字段,那就是调用类构造函数时。除此之外,您将会因为这样的尝试而收到错误。上述类的问题在于您无法访问字段。您需要找到一种解决方法。您仍然要记住只读方面,因此只能检索类的属性,而不能修改。只需对代码进行一点修改,您就可以演示这一点。
public class ServerFieldDemo
{
private string _Name;
private string _Function;
public string Name { get { return _Name; } }
public string Function { get { return _Function; } }
public ServerFieldDemo(string name, string function){
_Name = name;
_Function = function;
}
}
现在就参加课程进行试听。
ServerFieldDemo a = new ServerFieldDemo("pikkolo", "Domain Controller");
Console.WriteLine($"The name: {a.Name}, function: {a.Function}");
代码输出如下。
The name: pikkolo, function: Domain Controller
如果您尝试像这样重命名该类...
a.Name = "New Name";
...编译器将显示以下错误。
CS0200 Property or indexer 'ServerFieldDemo.Name' cannot be assigned to -- it is read only Pluralsight
原因在于属性定义中省略了setter,现在您只能访问但不能修改类字段内部更深层的属性。
此更改可让您保持类的内部结构完整并防止任何修改。总而言之,如果您想创建只读属性,只需省略该特定属性中的setter定义,同时确保字段保持私有,这样您就不会违反封装原则。
结论
在本指南中,您了解了字段和属性以及它们之间的关系,然后了解了如何使用只读概念保护封装在类中的数据和完整性。我希望这对您有所帮助,并感谢您阅读它!
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~