复制一个类,实例化它并使用继承将其用作另一个类

时间:2014-03-16 20:21:22

标签: c# visual-studio-2010 inheritance interface factory-pattern

我有一个名为MyClass1的类。我使用MyClassFactory1.CreateMyClass()来获取MyClass1的对象。

MyClass1 test = MyClassFactory1.CreateMyClass()

这很有效。现在我需要更改代码,因为我想添加一些功能。 我想复制类MyClass1以创建一个名为MyClass2的新类。所以MyClass2应该包含相同的方法,依此类推,但我想改变MyClass2中几个方法的内容。

例如:

public class MyClass1
{
   public void SomeMethod()
   {
     a = 5; 
   }
}

public class MyClass2
{
   public void SomeMethod()
   {
     a = 5; 
     CallAnotherFunctionSomeWhereElse();
   }
}

目标是创建MyClass1或MyClass2的实例,但输出必须是MyClass1,因为它在代码中的许多其他位置使用。测试需要表现得像MyClass1。

if(true)
  MyClass1 test = MyClassFactory1.CreateMyClass();
else if(false)
  MyClass1 test = MyClassFactory2.CreateMyClass();

CallSomeFunctions(test);

无法更改CallSomeFunctions(MyClass1 input){}方法。

从MyClass1派生MyClass2会有帮助吗?我想不是因为我无法使用改变后的功能吗? 如果我使用界面会有帮助吗?我想到了这样的事情:

IMyClass1 
   {
      void SomeMethod();
   }

public class MyClass2 : IMyClass1 
   public void SomeMethod()
   {
      a = 5; 
      CallAnotherFunctionSomeWhereElse();
   }

最好的办法是什么?

2 个答案:

答案 0 :(得分:2)

使用继承+虚拟方法或接口。或两者兼而有之。这是所有基本的OOP,我建议你阅读一些教程或购买一本好的入门书。

答案 1 :(得分:0)

我建议您声明一个父类,其中CallAnotherFunctionSomeWhereElse()是一个抽象类。

此类派生MyClass1和MyClass2

下一步是将CreateMethod声明为通用的。所以:

class abstract MyParentClass<T> {
       protected void Initialize();  // custom code here

        public static CreateMethod<T>() {
           T t=new T();
           t.Initialize();

         return t;
}

}

Initialize是一个初始化方法,用于设置和调用所需的任何代码

}