首页 新闻 会员 周边

OOP的问题

0
悬赏园豆:30 [已解决问题] 解决于 2012-12-06 22:22
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的判断。

不好意思,园豆不多了,求高手提点一下,我有点晕了。。。大力感谢!

小AI的主页 小AI | 菜鸟二级 | 园豆:354
提问于:2012-12-06 20:58
< >
分享
最佳答案
1
Base 类没有 propertyA,propertyB。在 Action 怎么访问,要转换派生类才可以。你这样设计是想要达到什么效果?
你应该 在 Base 类 加上 propertyA,propertyB 的虚属性virtual,让派生类重写
收获园豆:10
geass.. | 小虾三级 |园豆:1821 | 2012-12-06 21:28

感谢三位的答复,我在Base中以前统一是抽象方法,在各个子类中都实现了,这次出现这个蹩脚问题是后期需求迭代,有个子类需要一个额外的属性,我加到了这个子类里面,突然间蒙住了,看了几位的答复,我想明白了,第一个答复的选为最佳答案。。

谢谢大家。

小AI | 园豆:354 (菜鸟二级) | 2012-12-06 22:26
其他回答(2)
1
interface IBase
{
    object GetProperty();
}
class SubB:IBase
{
PropertyB 
.....
object GetProperty(){return PropertyB ;}
}
=========================
Action(IBase b){
b.GetProperty();
}
 
收获园豆:10
向往-SONG | 园豆:4853 (老鸟四级) | 2012-12-06 22:02
1

定义一些公共的方法,属性什么的,你的这个都是不一样的,所以访问起来就没有什么好的地方,比如都有一个Do的方法,你action中就写

obj.Do();

收获园豆:10
chenping2008 | 园豆:9836 (大侠五级) | 2012-12-06 22:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册