Question

I have a class which is called MyClass1. I use MyClassFactory1.CreateMyClass() to get an object of MyClass1.

MyClass1 test = MyClassFactory1.CreateMyClass()

This is working. Now i need to change the code because i want to add some features. I want to copy the class MyClass1 in order to create a new class called MyClass2. So MyClass2 should contain the same methods and so on but i want to change the content of a few methods in MyClass2.

For example :

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

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

The goal is to create an instance of either MyClass1 or MyClass2 but the output needs to be a MyClass1 because it is used in many other places in the code. test needs to behave like MyClass1.

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

CallSomeFunctions(test);

The method CallSomeFunctions(MyClass1 input){} can not be changed.

Would it help to derive MyClass2 from MyClass1? I think not because i will not be able to use the changed functionality right? Would it help if i use an interface? I thought about something like this:

IMyClass1 
   {
      void SomeMethod();
   }

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

What would be the best approach for this?

Was it helpful?

Solution

Either use inheritance + virtual methods, or an interface. Or a combination of both. This is all basic OOP, I suggest you read some tutorials or buy a good introductory book.

OTHER TIPS

I suggest you declare a parent class where CallAnotherFunctionSomeWhereElse() is an abstract class.

This class derivates MyClass1 and MyClass2

Next step is to declare CreateMethod as a generic one. So:

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

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

         return t;
}

}

Initialize is an initialization method that set a and calls whatever code you need

}

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top