控制数据c#中的访问

时间:2016-12-08 02:29:27

标签: c#

我正在学习封装,并且有这些控制数据访问方式的例子,两个代码都可以工作并做同样的事情,但是通过进一步的研究我还没有找到任何参考资料。方法访问,所以我希望有人可以解释哪一个更好,原因是什么?因为我有点困惑

(在msdn网站上研究方法访问时,它基本上只给了我属性的例子,这就是为什么我感到困惑)

方法访问

public class LogInToken
{
    private string Name;
    private string Password;

    public string GetName()
    {
        return Name;
    }

    public string GetPassword()
    {
        return Password;
    }

    public void SetName(string NewName)
    {
        Name = NewName;
    }

    public void SetPassword(string newPassword)
    {
        if (newPassword != null)
        {
            Password = newPassword;
        }
        else
        {
            throw new Exception("no password");
        }
    }
}

物业访问

public class LogInToken
{
    private string name;
    private string password;

    public string Name  
    {       
        get     
        {           
            return name;        
        }       
        set     
        {           
            name = value; // C# uses the implicit parameter "value"     
        }   
    }
    public string Password
    {
        get
        {
            return password;
        }
        set
        {
            if (value != null)
            {
                password = value;
            }
            else
            {
                throw new Exception("no password");
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

属性看起来像属性,以Person类为例,你可能有Height,FavoriteColor,Age,Name。

方法是AskQuestion,Marry,.....

C#允许你使用get和set来实现属性作为代码,虽然这在逻辑上是一个属性,(比如FavoriteColor)你实际上需要运行代码来设置或获取它(也许你在那里编写代码)然后在FaceBook上查看他们的个人资料,看看它是否显示为FavoriteColor)。此外,您可以拥有一个可以免费阅读的属性,但只能由某些人进行选择(内部设置,公共获取)。你也可以在集合上添加代码,确保值是合理的颜色,(你不允许'狗'。'树'或'Foof')

注意所有这一切都可以通过Person.getFavoriteColor和Person.setFavoriteColor(这是Java的方式)完成,但c#语法糖很干净

答案 1 :(得分:0)

根据这个例子你更喜欢哪一个?

public class Student(){
  public string Name {get;set;}
  public string LastName {get;set;}
}

OR

 public class Student(){
  private string Name; 
  private string LastName;

  public string GetStudentName(){
     return this.Name;
  }
  public string GetStudentLastName(){
     return this.LastName;
  }
  public void SetStudentName(string name){
     this.Name = name;
  }
  public void SetStudentLastName(string lname){
     this.LastName = lname
  }
}

基本上,第一个是语法糖,用于编写更少的属性初始化代码,该代码在 C#6.0中发布。 C#3.0。当我还在大学时,第二个人带我回去了(LOL)!

就哪种实施更好而言,归结为偏好不是吗?作为一个懒惰的开发人员,我会编写代码,即使是几次击键也能保存我:)

答案 2 :(得分:0)

属性是某些东西的特征或属性(不是.net意义上的属性,但是常规英语)。所以在你的情况下属性是有道理的。 strSQL = " TRANSFORM Max(Value)" _ & " SELECT Request_ID, Status" _ & " FROM [DATA$]" _ & " GROUP BY Request_ID, Status" _ & " PIVOT Field_Name;" 有一个名称和密码。在这里想形容词。

方法是行动,例如登录,连接,行走等。在这里思考动词。

按照惯例,属性不应该做任何繁重的工作。例如,在您的LoginToken setter中,如果您连接到某个Web服务或进入数据库以确认密码有效或以有效格式(无论出于何种原因),那么您不会在该属性中执行此操作二传手。属性可以工作,但轻量级工作,因为按照惯例,这是隐含的,其他开发人员可能多次获取或设置属性循环。但是,如果您有一个方法LoginToken.Password或更好的SetPassword(string password),那么开发人员很可能会调用该方法,缓存返回值而不是在循环内调用它。但这又是惯例。