应用场所是这样的:
一个菜单点击后要根据不同的环境要弹出不同的窗体出来,我想用工厂方法来实现,可遇到的问题是,C#只允许单继承,而窗体的父类肯定是Form,设计模式里工厂方法的关键就是多态,要定义抽象类。可问题是窗体的父类肯定是Form,那我定义了抽象类又有什么用呢?
定义接口是可以实现多继承,可接口无法定义对象。
例如:// 定义了一个接口
public interface IShape // 接口无法定义对象,下面这句话有错
IShape shape;设计模式和C#都是菜鸟。请各位帮个忙。
一个菜单点击后要根据不同的环境要弹出不同的窗体出来,我想用工厂方法来实现,可遇到的问题是,C#只允许单继承,而窗体的父类肯定是Form,设计模式里工厂方法的关键就是多态,要定义抽象类。可问题是窗体的父类肯定是Form,那我定义了抽象类又有什么用呢?
定义接口是可以实现多继承,可接口无法定义对象。
例如:// 定义了一个接口
public interface IShape // 接口无法定义对象,下面这句话有错
IShape shape;设计模式和C#都是菜鸟。请各位帮个忙。
解决方案 »
- C# winform中怎样复制界面和代码
- 请教一个字节处理问题
- DBF数据插入Sqlserver?
- string[] 作为控件属性报错:无法从其“DefaultContent”属性的字符串表示形式“String[] Array”创建“System.String[]”类型的对象。
- get和set该怎么用啊???
- DataRowBuilder rb
- DataSet同步,调用SqlHelper中的UpdateDataset的问题
- c#有控件接口向导吗
- vs2005 多線程問題
- 请问为什么我编的asp.net程序运行时,浏览器中只显示html控件,而不显示web窗体控件?
- 64位 windows servser 2008上面 excel控件报错.
- 求算法
{
void ShowForm();
}public class Factory
{
public IShape GetForm(int type)//其实这里可以直接用Form类作为返回类型
{
//根据type创建你的对象实例
return shape;
}
}
//这里仅作为例子
public class Shape1:IShape,Form
{
public void ShowForm()
{
this.show();
}
}
//这里仅作为例子
public class Shape2:IShape,Form
{
public void ShowForm()
{
this.show();
}
}
人家的要求是:在菜单的功能中使用工厂方法就是返回不同的Form(但同时又有自己的接口扩展)。也就是你用一句“完成需要的菜单功能”就忽略过去的那个东西才是人家需要搞明白的。
通过接口创建对象
看看petshop
interface IA
{}
public class A:IA
{} string CacheKey = DALFactory._path + ".A";
object objType = DALFactory.GetInstance(CacheKey);
(IA)objType;
通过字符串弹出form可使用反射
f.CreateForm();
public class Factory
{
public static IShape GetForm(Type type)//其实这里可以直接用Form类作为返回类型
{
object o=Activator.CreateInstance(type);//反射创建对象,你的对象需要有无参构造函数
if(o is IShape)
return o as IShape;
return null;
}可以这样调用:
Factory.GetForm(typeof(Shape1));如果觉得这种方式不好,还可以继承改造