Mik*_*keJ 6 c# inheritance properties interface
我有一个只读属性的接口
public interface IPerson
{
string Name { get; }
}
Run Code Online (Sandbox Code Playgroud)
还有一个具体的课......
public class Person : IPerson
{
public Person()
{
Name = "Person";
}
public string Name
{
get
{
return Name;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望Name只能在这个类的外部读取,但是如何在具体类中设置它?
错误:无法将Person.Name分配给.
如何在Person类中设置此属性的值?
Cha*_*ger 10
这与界面没有任何关系,你只是错误地声明属性.在C#6中,您可以创建一个只读属性,如下所示:
public class Person : IPerson
{
public Person()
{
Name = "Person";
}
public string Name { get; }
}
Run Code Online (Sandbox Code Playgroud)
在早期版本中,您可以使用可以设置的只读后备字段:
public class Person : IPerson
{
private readonly string _name;
public Person()
{
_name = "Person";
}
public string Name
{
get { return _name; }
}
}
Run Code Online (Sandbox Code Playgroud)
注意,接口只需要属性有一个getter,实现不必是只读的.如果您有理由修改值,可以添加setter:
public class Person : IPerson
{
public Person()
{
Name = "Person";
}
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果您只需要能够从类中更改值,则setter可以是私有的.
小智 6
您可以使用私有属性来保存值.
public class Person : IPerson
{
private string _name;
public Person()
{
_name = "Person";
}
public string Name
{
get
{
return _name;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您正试图通过阅读该物业来阅读该物业.不用说,这将导致无限循环.相反,您需要使用完整的自动属性或手动后备字段.
public class Person : IPerson
{
public Person()
{
Name = "Person";
}
public string Name { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)