C# 中的私有变量与属性
Private Variables vs Properties in C#
我正在自学 C#,我很好奇是否需要声明由 public 属性访问的私有成员变量。我正在使用的教科书说这是为了封装,但是如果可以根据 'get' 或 'set' 函数更改属性,为什么我需要私有变量开头?这是一个例子:
namespace Practice
{
struct Person
{
private int id;
private string name;
public int ID { get {return id;} set {id = value;} }
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.ID = 548;
person.Name = "Dude";
Console.WriteLine(person.Name);
}
}
}
所以 Name 和 ID 的操作方式完全相同,那么声明 private int id
和 private string name
的目的是什么?
在您的情况下,由于您没有对 支持字段 (私有字段)做任何事情,因此您不需要它。您可以使用自动属性 (但是,请记住,自动属性在后台使用支持字段)。
如果您正在对它进行任何操作,那么拥有一个支持字段很有用,例如,如果您想要验证 ID
应始终大于 100,那么您可以执行
public int ID
{
get
{
return id;
}
set
{
if(id <= 100) throw new Exception("Invalid ID provided");
id = value;
}
}
如果您尝试在 属性 而非支持字段上应用相同的逻辑,那么您 will/could 运行 会陷入无限递归。
我正在自学 C#,我很好奇是否需要声明由 public 属性访问的私有成员变量。我正在使用的教科书说这是为了封装,但是如果可以根据 'get' 或 'set' 函数更改属性,为什么我需要私有变量开头?这是一个例子:
namespace Practice
{
struct Person
{
private int id;
private string name;
public int ID { get {return id;} set {id = value;} }
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.ID = 548;
person.Name = "Dude";
Console.WriteLine(person.Name);
}
}
}
所以 Name 和 ID 的操作方式完全相同,那么声明 private int id
和 private string name
的目的是什么?
在您的情况下,由于您没有对 支持字段 (私有字段)做任何事情,因此您不需要它。您可以使用自动属性 (但是,请记住,自动属性在后台使用支持字段)。
如果您正在对它进行任何操作,那么拥有一个支持字段很有用,例如,如果您想要验证 ID
应始终大于 100,那么您可以执行
public int ID
{
get
{
return id;
}
set
{
if(id <= 100) throw new Exception("Invalid ID provided");
id = value;
}
}
如果您尝试在 属性 而非支持字段上应用相同的逻辑,那么您 will/could 运行 会陷入无限递归。