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

use*_*938 1 c# inheritance

我需要Xml序列化的单独类.我想知道如果有一个继承的一个简单的方法BuildingDetail类来获得从父的属性值大厦类.

家长班

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

继承类

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Far*_*yev 5

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

 private BuildingDetail(int buildingId, string buildingName) 
     : base(buildingId, buildingName)
 {
     ...
 }
Run Code Online (Sandbox Code Playgroud)

它将首先调用基础构造函数.此外,如果你没有把:base(param1, param2)你的构造函数放在后面,那么将调用base的空构造函数.