c# - 设置在具体类的接口(interface)中定义的只读属性

标签 c# inheritance properties interface

我有一个只读属性的接口(interface)

public interface IPerson
{
    string Name { get; }
}

和一个具体的类...

public class Person : IPerson
{

    public Person()
    {
        Name = "Person";
    }

    public string Name
    {
        get
        {
            return Name;
        }
    }
}

我希望 Name 只能在该类的外部读取,但如何在具体类中设置它?

错误:无法将 Person.Name 分配给。

如何在 Person 类中设置此属性的值?

最佳答案

这与接口(interface)没有任何关系,您只是错误地声明了属性。在 C# 6 中,您可以像这样创建一个只读属性:

public class Person : IPerson
{
    public Person()
    {
        Name = "Person";
    }

    public string Name { get; }
}

在早期版本中,您可以使用可设置的只读支持字段:

public class Person : IPerson
{
    private readonly string _name;

    public Person()
    {
        _name = "Person";
    }

    public string Name
    {
        get { return _name; }
    }
}

请注意,接口(interface)只要求属性有一个 getter,实现不必是只读的。如果您有理由修改该值,您可以添加一个 setter :

public class Person : IPerson
{
    public Person()
    {
        Name = "Person";
    }

    public string Name { get; set; }
}

如果您只需要能够从类中更改值,则 setter 可以是私有(private)的。

关于c# - 设置在具体类的接口(interface)中定义的只读属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38520797/

相关文章:

c# - 在 asp.net 中更新 UpdatePanel 中的图像 url

c# - 如何在 MVC 区域内的 WebForms 项目中使用现有的 MasterPage?

typescript 声明 : Merge a class and an interface

java - 为什么该示例的编译失败

java - Ant、jvmarg、系统属性和引号

java - Spring + Maven + .properties 文件

c# - 删除不带 .Include 的选择 N+1

php - 避免违反LSP

c# - 在 NHibernate 设置其值后在集合项上设置事件处理程序

c# - DataGridTemplateColumn 标题绑定(bind)