Gra*_*avy 16 c# encapsulation get set shorthand
我正在学习C#,并且正在学习如何将字段设为私有类,并使用Getters和Setters来公开方法而不是字段值.
是get; set;
在方法1和方法2相同呢?例如,一个是另一个的速记吗?
class Student
{
// Instance fields
private string name;
private int mark;
// Method 1
public string Name { get; set; }
// Method 2
public int Mark
{
get { return mark; }
set { mark = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
最后,如果您想在获取或设置值之前执行计算,是否可以使用方法2?例如,将值转换为百分比或执行验证?例如
class Student
{
// Instance fields
private string name;
private double mark;
private int maxMark = 50;
// Method 1
public string Name { get; set; }
// Method 2
public double Mark
{
get { return mark; }
set { if ( mark <= maxMark ) mark = value / maxMark * 100; }
}
}
Run Code Online (Sandbox Code Playgroud)
Sar*_*nan 14
是的,Method2
当你有一个自定义的getter和setter函数时,这就是你要走的路.默认情况下,当您使用Method1时,将在内部处理默认的私有属性.请参阅此URL以获取更多详细信息.
样品:
string _name;
public string Name
{
get => _name;
set => _name = value;
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*bin 11
是的,方法1是方法2的快捷方式.我建议默认使用方法1.当您需要更多功能时,请使用方法2.您还可以为get和set指定不同的访问修饰符.