class Base { } class SubA:Base { private int propertyA; public int PropertyA { get{return propertyA} } } class SubB:Base { private string propertyB; public string PropertyB { get{return propertyB} } } class Program { public void Action(Base obj) { // } }
上面是一段测试程序,我要在Action中访问SubA或者SubB,然后访问对应的PropertyA或者PropertyB,这个是不是违反了什么规则,应该怎么设计才好,我不想Is, As的判断。
不好意思,园豆不多了,求高手提点一下,我有点晕了。。。大力感谢!
Base 类没有 propertyA,propertyB。在 Action 怎么访问,要转换派生类才可以。你这样设计是想要达到什么效果?
你应该 在 Base 类 加上 propertyA,propertyB 的虚属性virtual,让派生类重写
感谢三位的答复,我在Base中以前统一是抽象方法,在各个子类中都实现了,这次出现这个蹩脚问题是后期需求迭代,有个子类需要一个额外的属性,我加到了这个子类里面,突然间蒙住了,看了几位的答复,我想明白了,第一个答复的选为最佳答案。。
谢谢大家。
interface IBase
{
object GetProperty();
}
class SubB:IBase {
PropertyB
.....
object GetProperty(){return PropertyB ;}
}
=========================
Action(IBase b){
b.GetProperty();
}
定义一些公共的方法,属性什么的,你的这个都是不一样的,所以访问起来就没有什么好的地方,比如都有一个Do的方法,你action中就写
obj.Do();