C# 控制数据c中的访问#
我正在学习封装,并有这些控制数据访问的方法示例,这两个代码都工作并做相同的事情,但通过进一步的研究,我还没有找到任何关于方法访问的参考,所以我希望有人能解释哪一个更好以及为什么?因为我有点困惑 (在msdn网站上研究方法访问时,它基本上只是给了我属性示例,这就是为什么我感到困惑的原因) 方法访问C# 控制数据c中的访问#,c#,C#,我正在学习封装,并有这些控制数据访问的方法示例,这两个代码都工作并做相同的事情,但通过进一步的研究,我还没有找到任何关于方法访问的参考,所以我希望有人能解释哪一个更好以及为什么?因为我有点困惑 (在msdn网站上研究方法访问时,它基本上只是给了我属性示例,这就是为什么我感到困惑的原因) 方法访问 public class LogInToken { private string Name; private string Password; public string Ge
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");
}
}
}
}
属性是看起来像属性的东西,以Person类为例,您可能有身高、偏好颜色、年龄和姓名 方法是提问,结婚 C#允许您使用get和set将属性实现为代码,尽管这在逻辑上是一个属性,(比如说FavoriteColor),但您实际上需要运行代码来设置或获取它(可能您在那里编写代码,然后在FaceBook上查找他们的个人资料,查看其是否显示FavoriteColor)。此外,您可以拥有一个可以自由读取但只能由某些人设置的属性(内部集、公共get)。此外,您还可以在集合上添加代码,以确保值是合理的颜色,(您不允许使用“dog”、“tree”或“Foof”)
注意,所有这些都可以通过Person.getFavoriteColor和Person.setFavoriteColor(这是Java的方式)来完成,但是c#语法糖很好而且干净基于这个示例,您更喜欢哪一个
public class Student(){
public string Name {get;set;}
public string LastName {get;set;}
}
或
从本质上讲,第一个是一个语法糖,可以为C#6.0中发布的属性初始化编写更少的代码。C#3.0。而第二个让我想起了我还在大学的时候(哈哈)
就哪种实现更好而言,这取决于偏好,不是吗?作为一个懒惰的开发人员,我编写的代码甚至可以省去几次按键:)属性是某些东西的特征或属性(不是.net意义上的属性,而是普通英语意义上的属性)。所以在你的情况下,属性是有意义的。
LoginToken
有名称和密码。想想这里的形容词
方法是诸如登录、连接、行走等操作。请在此处思考动词
按照惯例,酒店不应进行任何重物搬运。例如,在您的
LoginToken.Password
setter中,如果您正在连接到某个web服务或前往数据库以确认密码有效或格式有效(无论出于何种原因),则不会在属性setter中执行此操作。属性可以工作,但可以轻量级工作,因为按照惯例,这是隐含的,其他开发人员可能多次在循环中获取或设置属性。但是,如果您有一个方法SetPassword(stringpassword)
或者更好的方法ValidatePassword(stringpassword)
,那么开发人员很可能会调用该方法,缓存返回值,而不是在循环中调用它。但这又是惯例。本文作者打破了什么是自动属性初始值设定项,这可能是一个重复。实际上,您的第一个示例只显示了自动属性,它已经存在于C#3.0.aah!感谢@Martheen指出这一点。在C#6.0中,您可以使用自动初始值设定项属性(如设置访问器可见性)执行更多操作
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
}
}