实现抽象类层次结构 -

时间:2016-05-02 12:28:58

标签: c# class abstract-class

我创建了一个抽象类层次结构,例如:

abstract public class BaseDirectory {
}

abstract public class BaseUser() {
    protected readonly BaseDirectory _DIR
    BaseUser(BaseDirectory dir) {
        _DIR = dir;
    }
}

然后我实现了抽象层次结构:

class MyDirectory : BaseDirectory {
    internal void SomeMethod() {
    }
}

class MyUser : BaseUser {
    MyUser(MyDirectory dir) : base(dir)
    {
    }
    internal void SomeMethod() {
        _DIR.SomeMethod(); // <- how to do this?
    }
}

现在,从MyUser类开始,我希望能够访问MyDirectory中我当然可以预期的dir实例。 C#程序员如何在风格上实现这一点?_DIR中使用包含未发布的MyDirectory的私有属性覆盖MyUser,在任何地方使用强制转换,完全是其他任何东西?

2 个答案:

答案 0 :(得分:2)

这可能取决于用例。但我要做的是在BaseUser抽象类中使用泛型来指定使用的目录类型:

像这样的图像:

public abstract class BaseDirectory
{

}

public abstract class BaseUser<TDirectory> where TDirectory : BaseDirectory
{
    protected readonly TDirectory _dir;
    protected BaseUser(TDirectory dir)
    {
        _dir = dir;
    }
}

public class MyDirectory : BaseDirectory
{
    public void SpecificMethod() { }
}

public class MyUser : BaseUser<MyDirectory>
{
    public MyUser(MyDirectory dir) : base(dir)
    {

    }

    internal void SomeMethod()
    {
        // call specific method on type MyDirectory
        _dir.SpecificMethod();
    }
}

这样您就可以访问类型为MyDirectory而不是BaseDirectory的_dir-Variable。如果您需要具有不同目录的多个MyUser实例,则还可以使MyUser类具有通用性。

我可能完全错了,这完全是垃圾,但至少我会怎么做:)

答案 1 :(得分:1)

您可以在_DIR课程中对MyUser字段进行类型转换。通过构造函数确保在那里有一个MyDirectory的实例:

(_DIR as MyDirectory).SomeMethod()