C# 获取抽象类的当前实例,并使用该实例调用C中的特定子类属性#
我不确定标题是否令人困惑,请随意编辑 我有以下示例代码C# 获取抽象类的当前实例,并使用该实例调用C中的特定子类属性#,c#,inheritance,properties,abstract,C#,Inheritance,Properties,Abstract,我不确定标题是否令人困惑,请随意编辑 我有以下示例代码 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)
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是否存在,而不是在不检查每种类型的情况下设置它
谢谢一些选项,没有一个是理想的: 编译时不安全的选项:
- 使用反射查看对象是否具有
属性(如果有,则设置该属性)p2
- 使用
并在运行时处理任何异常dynamic
- 创建从
继承并具有A
属性并强制转换为该类型的中间类型p2
- 使用
属性定义一个接口,该属性p2
和B
都实现并尝试强制转换到该接口C
动态。