我不确定标题是否令人困惑,随时可以编辑它。
我有以下示例代码
public abstract class A
{
public int P1 {get; set;}
}
public class B : A
{
public int p2 {get; set;}
}
public class C : A
{
public int p2 {get; set;}
}
public class test
{
A a = null;
public test(A a1)
{
a = a1;
}
public void foo()
{
if((a as B)!=null)
{
(a as B).p2 = 1;
}
else if ((a as C)!=null)
{
(a as C).p2 = 2;
}
}
}
P2在抽象类中不存在,只有类的一些继承才会拥有它。我要设置此属性,我需要检查当前实例是否为Class B或C类型,而不是我将设置该属性。每次我要添加一个具有此属性的类时,我需要添加一个检查。有没有办法只是获取实例并检查P2是否存在而不是检查每种类型。
由于
答案 0 :(得分:3)
一些选项,其中没有一个是理想选择:
非编译时安全的选项:
p2
属性(如果有,则设置它)dynamic
并在运行时处理任何异常需要更改班级设计的选项
A
且具有p2
属性并强制转换为该类型的中间类型p2
属性的接口,B
和C
都实现并尝试强制转换为该接口。