我以前发过这个,但我觉得它太冗长和无关紧要了.我的问题是也喜欢这样.第二个链接中的一张海报说答案(为什么你不能做下面的代码)是一个设计问题,特别是"继承的坏用法".所以我想再次与StackOverflow的专家一起检查这个问题,看看这是否真的是"糟糕的继承"问题 - 但更重要的是,如何修复设计.
就像海报一样,我也对Factory方法以及如何应用它感到困惑.似乎工厂方法适用于具有与抽象基类完全相同的实现的多个具体类,并且不添加它们自己的属性.但是,正如您将在下面看到的,我的具体类构建在抽象基类之上并添加额外的属性.
我们建立的基类:
public abstract class FlatScreenTV
{
public string Size { get; set; }
public string ScreenType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
扩展类示例:
public class PhillipsFlatScreenTV : FlatScreenTV
{
// Specific to Phillips TVs. Controls the backlight intensity of the LCD screen.
public double BackLightIntensity { get; set; }
}
public class SamsungFlatScreenTV : FlatScreenTV
{
// Specific to Samsung TVs. …Run Code Online (Sandbox Code Playgroud) 我有一个返回接口的属性.在调试期间,我可以打破返回的内容,当它是界面时,Visual Studio足够聪明,可以知道它实际上是派生类型.我假设它使用反射或其他东西.我不确定.我的问题是,我可以在运行时向我提供相同的信息,这样我就可以创建一个适当类型的变量并将接口转换为那样的接口吗?这就是我的意思:
IPreDisplay preDisplay = cb.PreDisplay;
Run Code Online (Sandbox Code Playgroud)
如果preDisplay是RedPreDisplay,我希望能够编码
RedPreDisplay tmp = preDisplay as RedPreDisplay;
Run Code Online (Sandbox Code Playgroud)
或者如果preDisplay是GreenPreDisplay ......
GreenPreDisplay tmp = preDisplay as GreenPreDisplay;
Run Code Online (Sandbox Code Playgroud)
等...如果可能的话,我想避免使用凌乱的switch语句,如果我可以使用非常棒的泛型.
如果您对我如何做到这一点有任何建议或示例,请分享.