对于C#中的新重载,真的有一个有效的场景吗?

对于C#中的新重载,真的有一个有效的场景吗?,c#,design-patterns,new-operator,C#,Design Patterns,New Operator,该示例显示了我的场景。我有一个基类,它有一些很好的功能,被派生类SpecialClass使用。但是基类有一个类型为BaseClass的父类。SpecialClass需要SpecialClass类型的父类,因为我不想每次使用它时都强制转换-更好的安全转换-父类。为了解决这个问题,我使用关键字new来创建这个属性的重载。这同样适用于BaseConnection和其他一些属性 不幸的是,我讨厌这个关键词,在我看来,它总是代表着缺乏一个好的设计。但在这种情况下,我显然不知道如何更好地解决这个问题。有人有

该示例显示了我的场景。我有一个基类,它有一些很好的功能,被派生类SpecialClass使用。但是基类有一个类型为BaseClass的父类。SpecialClass需要SpecialClass类型的父类,因为我不想每次使用它时都强制转换-更好的安全转换-父类。为了解决这个问题,我使用关键字new来创建这个属性的重载。这同样适用于BaseConnection和其他一些属性

不幸的是,我讨厌这个关键词,在我看来,它总是代表着缺乏一个好的设计。但在这种情况下,我显然不知道如何更好地解决这个问题。有人有主意吗


关于,Yggdrasil

为什么不使用类似的东西(例如):

或者类似的情况(如果BaseConnection和SpecialConnection之间没有关系):


但是也许你应该再考虑一下你的类分离,也许你应该从它的创建者那里把特定的关系注入基类,或者使用某种容器来处理接口。只是一个想法……:)

我不确定我完全理解你的需求,但是你可以考虑制作<代码> BaseClass < /Cord>泛型-这意味着你不必强迫调用方显式地投。@ RGraham,好主意——希望这里的父代总是和派生类的类型相同。@ RGraham,我更新了这个例子。Parent不是唯一的属性,我不喜欢为所有这些属性设置一个通用参数。此外,我还使用了基类。如果我在这里使用泛型,那么这将是基类。
new
不是运算符(尽管它在中)。而且,它不会产生过载:事实上,它会产生相反的结果。@sehe,thx,但这并不能解决我的问题。我知道new做了什么,这就是我不喜欢使用它的原因。第一个选项不是选项,因为他说他在访问派生类的父类时需要访问派生类的功能<代码>动态在这里是一个糟糕的设计,因为它完全关闭了类型安全性,而这根本不合适。没错,第一个选项不起作用,因为我需要再次强制转换,而另一个选项在我看来与新选项一样脏,尽管我从未使用过它。
public class Base
{

    public virtual Base Parent { get {return ...}}

    public virtual BaseConnection Connection { get {return ... ;}}
}

public class Special : Base
{

    public override Base Parent { get {return MySpecialParent;}}

    public override BaseConnection Connection { get {return new SpecialConnection();}}
}
public class Base
{

    public virtual dynamic Parent { get {return ...}}

    public virtual dynamic Connection { get {return ... ;}}
}

public class Special : Base
{

    public override dynamic Parent { get {return MySpecialParent;}}

    public override dynamic Connection { get {return new SpecialConnection();}}
}