我正在学习一些优秀的代码练习,这就是为什么我要通过一些代码,有些东西我无法理解。它为每个实体创建了一个单独的类属性,就像在userClass中它具有属性
一样 #region public properties
private int uid;
public int userId
{
get { return uid; }
set { uid = value; }
}
private string uName;
public string userName
{
get { return uName; }
set { uName = value; }
}
private string pwd;
public string password
{
get { return pwd; }
// set { pwd = value; }
}
private string uAddress;
public string userAddress
{
get { return uAddress; }
set { uAddress = value; }
}
private string fName;
public string firstName
{
get { return fName; }
set { fName = value; }
}
private string lName;
public string lastName
{
get { return lName; }
set { lName = value; }
}
private string uPhone;
public string userPhone
{
get { return uPhone; }
set { uPhone = value; }
}
private string uMobile;
public string userMobile
{
get { return uMobile; }
set { uMobile = value; }
}
private int secretQuestion;
public int securityQuestion
{
get { return secretQuestion; }
set { secretQuestion = value; }
}
private string userAnswer;
public string answer
{
get { return userAnswer; }
set { userAnswer = value; }
}
#endregion
并且从业务逻辑类中使用属性而不是直接使用任何实体的属性名称,但我很困惑,是否需要创建这样的属性?
除此之外,它已经获得了数据库列名的枚举,其背后有明确的理由,如果在不久的将来我们必须更改数据库表的字段名称,那么我们不必更改整个业务逻辑类我们可以直接对枚举进行更改,但是有什么用于创建这样的属性请详细说明我
答案 0 :(得分:1)
可以在Interfaces上定义属性,但不能在成员字段中定义。因此,如果您需要将此类重构为实现接口的类,则可以将属性放在接口上(然后还有其他类来实现它们。)
答案 1 :(得分:1)
你真的在问为什么它使用属性而不是公共字段吗?
字段是一个实现细节 - 它们是数据的存储方式,不应该是外界关心的,至少99%的类型。属性是类型在其API方面具有的合同的一部分 - 实现取决于类型。换句话说,这是一个封装问题。属性可以在接口中表示,作为抽象方法等,正是因为它们使合同和实现分开。
此外,属性使数据绑定,调试和其他各种事情更简单。我有article about why properties matter,您可能会发现它很有用。
说完所有这些后,这些属性以冗长乏味的方式实现 - 并且它们不遵守.NET命名约定。我会把它们写成:
public int UserId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
// etc
答案 2 :(得分:1)
一些类似的问题:
Public Fields versus Automatic Properties
除上述之外:实际上,您可以自己轻松决定公共领域或财产。理解这一点要容易得多:
(1)Name
是类Person
(2)Speed
是类Plane
(3)Empty
是类String
的公共字段。如果你说String
有一个名为Empty
的属性,那真的很奇怪。 String
有一个属性Length
很容易理解。