检查继承的具体类型 类
Checking concrete type of inheriting classes
假设我有几个 classes:
public class BaseClass
{
//....
}
public class ChildClassA : BaseClass
{
//....
}
public class ChildClassB : BaseClass
{
//....
}
现在我有另一个 class 使用上面的 child classes:
public class Program
{
private Type _type;
private ChildClassA _childA = GetChildClassA();
private ChildClassB _childB = GetChildClassB();
public void MethodOne()
{
if(_type == typeof(ChildClassA))
DoSomething(_childA);
else if(_type == typeof(ChildClassB))
DoSomething(_childB);
}
public void MethodTwo()
{
if(_type == typeof(ChildClassA))
DoSomething(_childA);
else if(_type == typeof(ChildClassB))
DoSomething(_childB);
}
}
假设我在我的代码中一遍又一遍地在 MethodOne
和 MethodTwo
中使用 if 子句,我怎样才能使它更干净?使用接口,我可以只声明一个 class 变量 IBaseClass
并为其分配 _childA
或 _childB
。但是对于继承的 classes,这是不可能的。还有其他方法可以得到相同的结果吗?所以基本上我会得到这样的结果:
public class Program
{
private IBaseClass _child = GetChildClass();
public void MethodOne()
{
DoSomething(_child);
}
public void MethodTwo()
{
DoSomething(_child);
}
}
编辑:澄清一下,我不能使用接口,因为所有 classes 很久以前就已经实现了,重构它们将是一项艰巨的任务。所以我基本上是在寻找与 base 和 child classes.
类似的东西
EDIT2:这就是我对 HimBromBeere 的回答发表评论的意思:
private void DoSomething(BaseClass baseC)
{
var childA = baseC as ChildClassA;
if (childA != null)
childA.DoSomethingA();
var childB = baseC as ChildClassB;
if(childA != null)
childB.DoSomethingB();
}
您似乎想在运行时通过切换实际类型来指示使用哪种行为,这就是多态性的意义所在。
您不需要界面,因为您已经拥有一个公共基础-class。所以只需将 private IBaseClass _child = GetChildClass()
更改为 private BaseClass _child = GetChildClass()
:
public class Program
{
private BaseClass _child = GetChildClass();
public void MethodOne()
{
DoSomething(_child);
}
public void MethodTwo()
{
DoSomething(_child);
}
}
这假设 DoSomething
只需要一个 BaseClass
作为参数。
假设我有几个 classes:
public class BaseClass
{
//....
}
public class ChildClassA : BaseClass
{
//....
}
public class ChildClassB : BaseClass
{
//....
}
现在我有另一个 class 使用上面的 child classes:
public class Program
{
private Type _type;
private ChildClassA _childA = GetChildClassA();
private ChildClassB _childB = GetChildClassB();
public void MethodOne()
{
if(_type == typeof(ChildClassA))
DoSomething(_childA);
else if(_type == typeof(ChildClassB))
DoSomething(_childB);
}
public void MethodTwo()
{
if(_type == typeof(ChildClassA))
DoSomething(_childA);
else if(_type == typeof(ChildClassB))
DoSomething(_childB);
}
}
假设我在我的代码中一遍又一遍地在 MethodOne
和 MethodTwo
中使用 if 子句,我怎样才能使它更干净?使用接口,我可以只声明一个 class 变量 IBaseClass
并为其分配 _childA
或 _childB
。但是对于继承的 classes,这是不可能的。还有其他方法可以得到相同的结果吗?所以基本上我会得到这样的结果:
public class Program
{
private IBaseClass _child = GetChildClass();
public void MethodOne()
{
DoSomething(_child);
}
public void MethodTwo()
{
DoSomething(_child);
}
}
编辑:澄清一下,我不能使用接口,因为所有 classes 很久以前就已经实现了,重构它们将是一项艰巨的任务。所以我基本上是在寻找与 base 和 child classes.
类似的东西EDIT2:这就是我对 HimBromBeere 的回答发表评论的意思:
private void DoSomething(BaseClass baseC)
{
var childA = baseC as ChildClassA;
if (childA != null)
childA.DoSomethingA();
var childB = baseC as ChildClassB;
if(childA != null)
childB.DoSomethingB();
}
您似乎想在运行时通过切换实际类型来指示使用哪种行为,这就是多态性的意义所在。
您不需要界面,因为您已经拥有一个公共基础-class。所以只需将 private IBaseClass _child = GetChildClass()
更改为 private BaseClass _child = GetChildClass()
:
public class Program
{
private BaseClass _child = GetChildClass();
public void MethodOne()
{
DoSomething(_child);
}
public void MethodTwo()
{
DoSomething(_child);
}
}
这假设 DoSomething
只需要一个 BaseClass
作为参数。