在C#中我有一个基类和一个派生类。如何访问派生类的实例的属性作为参数以基类形式传递
我有有基类作为输入参数
public void SomeFunction(BaseClass InstanceOfDerivedClass)
有没有一种方法,我可以访问特定的派生类的属性,即使它已经作为一个基类传递的函数?我可以使用GetType或Cast或类似的东西吗?
我明白这些解决方案可能并不优雅,但目前的替代方案是为不同派生类多次重复此功能。
在C#中我有一个基类和一个派生类。如何访问派生类的实例的属性作为参数以基类形式传递
我有有基类作为输入参数
public void SomeFunction(BaseClass InstanceOfDerivedClass)
有没有一种方法,我可以访问特定的派生类的属性,即使它已经作为一个基类传递的函数?我可以使用GetType或Cast或类似的东西吗?
我明白这些解决方案可能并不优雅,但目前的替代方案是为不同派生类多次重复此功能。
你可以这样做(糟糕的方法):
public void SomeFunction(BaseClass instanceOfDerivedClass)
{
DerivedClass derived = null;
if(instanceOfDerivedClass is DerivedClass)
{
derived = instanceOfDerivedClass as DerivedClass;
// Do stuff like :
int prop = derived.DerivedProperty;
}
}
或者,如由Eric(好办法)建议:
public void SomeFunction(BaseClass instanceOfDerivedClass)
{
DerivedClass derived = instanceOfDerivedClass as DerivedClass;
if(derived != null)
{
// Do stuff like :
int prop = derived.DerivedProperty;
}
}
铸造绝对应该做的伎俩,因为在参考堆是这个类。可能是这样的:
if (InstanceOfDerivedClass is DerivedClass)
而在该块中,您可以投射它并与之交互。
但更大的问题是,为什么你需要?这听起来像这个方法使用了错误的抽象,如果被接受为参数的类型不是正确的类型。这正在打破Liskov Substitution,看起来像是重构设计的主要候选人。 (其中我们不知道足够的帮助。)
正确的想法。非常罗嗦的实现。如何简单地'DerivedClass derived = instanceOfDerivedClass作为DerivedClass;如果(派生!=空)...' –
多么可怕的铸造练习... –
@Eric:我修好了,谢谢。 –