日期:2014-05-19  浏览次数:20604 次

关于把基类强制转换为派生类
我写了个派生类   public   class   MyMemberShipUser:MembershipUser
现在用MemberShip.GetUser(userName)得到了一个MemberShipUser
如果把这个基类实例MemberShipUser转换为派生类实例myMemberShipUser呢

------解决方案--------------------
派生类的信息肯定比基类多,因此创建的基类对象是不能转换为派生类的。
比如:A是基类,B派生自A,比A多了个属性x。
A a = new A();
B b = (B)a;是不允许的,因为不知道x应该怎样取值。

而:
A a = new B();
B b = (B)a;是允许的。
------解决方案--------------------
使用纯粹的 OO 概念很难理解那些微软项目中某些比较烂的设计。我估计 Membership、MembershipUser 大概是项目组里某个喜欢设计模式而并不喜欢纯粹OO的讨厌的小程序员设计的,像memberShipProvider这类繁琐的控制器类的东西只有设计模式那种故意把简单的事情搞得又臭又长的代码最喜欢在自然的应用概念旁边放好几个设计模式特有的计算机领域概念。

不仅微软项目,很多所谓的大公司的项目组里总是有很多小程序员(绝对不是OO设计师水平)喜欢给类型命名 xxxxxProvider、xxxxxControler、xxxxxManager、xxxxxHelper。这是一个经验,如果这种命名很多,这样的项目组里活活能把人累死。