我创建了一个抽象类层次结构,例如:
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
,在任何地方使用强制转换,完全是其他任何东西?
答案 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()