c# - 我可以让我的继承类使用比这更少的代码获取父类实例的属性值吗?

标签 c# inheritance

我需要单独的 Xml 序列化类。我想知道是否有更简单的方法让继承 BuildingDetail 类从父 Building 类获取属性值。

父类

public class Building
{
    public int BuildingId;
    public string BuildingName;

    protected Building()
    {
    }

    private Building(int buildingId, string buildingName)
    {
        BuildingId = buildingId;
        BuildingName = buildingName;
    }

    public static Building Load(int buildingId)
    {
        var dr = //DataRow from Database

        var building = new Building(
            (int) dr["BuildingId"],
            (string) dr["BuildingName"]);

        return building;
    }
}

继承类

public class BuildingDetail : Building
{
    public BaseList<Room> RoomList
    {
        get { return Room.LoadList(BuildingId); }
    }

    protected BuildingDetail()
    {
    }

    // Is there a cleaner way to do this?

    private BuildingDetail(int buildingId, string buildingName)
    {
        BuildingId = buildingId;
        BuildingName = buildingName;
    }

    public new static BuildingDetail Load(int buildingId)
    {
        var building = Building.Load(buildingId);

        var buildingDetail = new BuildingDetail(
            building.BuildingId, 
            building.BuildingName
            );

        return buildingDetail;
    }
}

谢谢。

最佳答案

首先,将基类构造函数访问修饰符更改为protected。然后你可以用 base 调用基类构造函数关键词:

 private BuildingDetail(int buildingId, string buildingName) 
     : base(buildingId, buildingName)
 {
     ...
 }

它将首先调用基础构造函数。此外,如果您不在构造函数之后放置 :base(param1, param2),将调用基的空构造函数。

关于c# - 我可以让我的继承类使用比这更少的代码获取父类实例的属性值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28986568/

相关文章:

c# - 如何在 Xamarin 中使用 SetAction

Java 方法覆盖和变量阴影

python - 使用 super() 继承关键字参数,但只有在创建实例时指定时才会列出它们

java - 当方法的签名定义为 Collection<class> 时,为什么方法不能采用 Collection<subClass>

c# - Monodevelop gtk-sharp 3.0

c# - 需要在 ASP.NET 网络表单中包装表行和控件

c# - 通过 C# 进行视频 session

c# - 在 SQLite.Net-PCL 中创建和使用具有复合主键的表

ios - Swift,类的多重继承

c++ - 类继承 : static members and virtual methods