Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该使用什么设计模式来支持不同的行为;平行;到类层次结构?_C#_.net_Wpf_Oop_Design Patterns - Fatal编程技术网

C# 我应该使用什么设计模式来支持不同的行为;平行;到类层次结构?

C# 我应该使用什么设计模式来支持不同的行为;平行;到类层次结构?,c#,.net,wpf,oop,design-patterns,C#,.net,Wpf,Oop,Design Patterns,我在我的4X游戏中声明了一个ISpaceObject接口 我还声明了实现该接口的抽象Vehicle和StellarObject类 每个抽象类都有继承自它的子类(例如飞船,基地,战机用于飞行器,行星,恒星,风暴用于恒星天体) 我想能够显示图标和肖像图片为每种类型的对象 我已经在各个类中实现了图形代码(例如图标属性),但它是WinForms特有的,我想为我的应用程序编写一个WPF端口 我不想在我的每个类中都有WinFormsIcon,WpfIcon等属性;这有点傻,我敢肯定,首先把WinForms代

我在我的4X游戏中声明了一个
ISpaceObject
接口

我还声明了实现该接口的抽象
Vehicle
StellarObject

每个抽象类都有继承自它的子类(例如
飞船
基地
战机
用于
飞行器
行星
恒星
风暴
用于
恒星天体

我想能够显示图标和肖像图片为每种类型的对象

我已经在各个类中实现了图形代码(例如
图标
属性),但它是WinForms特有的,我想为我的应用程序编写一个WPF端口

我不想在我的每个类中都有
WinFormsIcon
WpfIcon
等属性;这有点傻,我敢肯定,首先把WinForms代码放在那里是一个错误

如何在不使用以下代码的情况下执行类似的并行行为:

if (o is Ship)
    // get ship graphic
else if (o is Base)
    // get base graphic
else if (o is Fighter)
    // get fighter graphic

etc?

您可以将属性改为
字符串IconName

此名称可以指向资源程序集中的嵌入式资源


或者您可以使用将
位图
(我假设这是您在WinForms项目中拥有的)转换为ImageSource。

是ISpaceObject接口的图标属性部分吗?您可以为您的类型提供一些代码吗?抱歉,我没有得到您想要的。您不想将代码移植到wpf,而是想保持Windows窗体中的状态?我认为这类问题的常见模式是Traits@ekolis您能展示一下到目前为止您是如何在任何类中管理WinFormsIcon的吗?这将有助于了解当前的情况并为您提供解决方案。嗯,System.Windows.Interop.Imaging听起来是最简单的解决方案,尽管感觉有些不对劲!我不能使用IconName,因为其中一些图像是动态绘制的。