我正在考虑使用new
重新定义子类中的成员以提供更具体的返回类型。问题是:这是个好主意,还是自找麻烦?
要解决的问题是当有几个“镜像”类层次结构时,每个层次结构层的类型都引用另一个层次结构的同一级别。很难解释,所以举个例子:
class A1 {}
class A2 : A1 {}
class A3 : A2 {}
abstract class B1
{
protected A1 myA;
A1 MyA { get { return myA; } }
}
abstract class B2 : B1
{
new A2 MyA { get { return (A2)myA; } }
}
class B3 : B2
{
new A3 MyA
{
get { return (A3)myA; }
set { myA = value; }
}
}
有代码只处理抽象的“级别”1(A1
/B1
等),其他级别也一样。如果每个“级别”都能看到尽可能具体的类型,那就太好了。目前,我在最顶层定义了类型,并在调用代码中一直向下转换。有时我使用另一个名称为某个“级别”添加另一个成员,这会导致更多的冗余成员。我想让它更干净。
(泛型在这里不是一个选项,因为B2
不知道就不会有用B3
(那里需要额外的接口)。如果有很多类型(例如,还有 C1/2/3、D1/2/3 ...)会有太多通用参数。从技术上讲,它会起作用,但它会变得非常复杂。)
此外,我将序列化其中的一些类 ( DataContractSerializer
),并使用 NHibernate 将一些类映射到数据库。
有没有人已经做过这样的事情?值得推荐吗?有没有其他方法可以解决同类问题?
编辑:由于关于演员表和属性实现的讨论,我稍微更改了代码。这实际上不是这里的问题。我只是试着写尽可能少的代码来做一个简短的例子。