Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扩展C中类的简单getter、setter方法#_C#_Class_Extend_Setter_Getter - Fatal编程技术网

C# 扩展C中类的简单getter、setter方法#

C# 扩展C中类的简单getter、setter方法#,c#,class,extend,setter,getter,C#,Class,Extend,Setter,Getter,我有一个抽象类“建筑”: public abstract class Building { abstract public int ID {get;} abstract public string name {get;} } 类(例如)总部:Building具有这些getter和setter方法的变量。问题是我必须在每个子类中编写 private int _ID = 1; public int ID { get {return _ID;} } 有没有一种方法可以在抽象类中创建一个ge

我有一个抽象类“建筑”:

public abstract class Building {
abstract public int ID {get;}
abstract public string name {get;}
}
类(例如)总部:Building具有这些getter和setter方法的变量。问题是我必须在每个子类中编写

private int _ID = 1;
public int ID {
    get {return _ID;}
}
有没有一种方法可以在抽象类中创建一个getter setter方法,比如ahead,并保存代码,这样我就只需要设置变量了?
感谢您的帮助。

您可以将setter设置为受保护的,和/或允许在构造函数中设置,而不是将属性抽象化:

public abstract class Building 
{
    // Optional constructor
    protected Building(int id, string name)
    {
         this.ID = id;
         this.Name = name;
    }

    public int ID { get; protected set; }
    public string Name { get; protected set; }
}

这会将实现移到基类中,但仍然只允许子类设置这些值。

您可以尝试在基类中添加受保护的设置器,并在派生类的ctor中设置值:

public class Building
{
     public int Id{get;protected set;}
在派生类中:

public class Headquarter: Building
{
    public Headquarter()
    {
        Id = 1;
    }
}