M
Mark
I have an abstract class, and a set of classes that inherit from my abstract
class. The fact that it is abstract is likely irrelevant. I have a static
factory method in my abstract class that creates subclasses. The
constructor in my subclasses must be able to call the constructor in my base
class. For the factory method in my abstract class to call the constructor
on my subclasses, the constructor in the subclass MUST be public (or
internal). They cannot be private or protected. However, doen't that
basically defeat the purpose of factory? I'd love to be able to make all
these constructors private or similar so that someone can't create subclass
instances without using the Factory. If this was all in a separate DLL, I
suppose I'd be saved by "internal", but we have small team of developers
working on projects where that type of seperation really shouldn't be
necessary.
Suggestions? Code sample below ...
Thanks in advance.
Mark
public abstract class MyBase
{
protected string first;
public MyBase(string first )
{
this.first = first;
}
public static MyBase Factory(int stateId)
{
switch (stateId)
{
case 700:
return new MySubClass1(first);
default:
throw new Exception("Bogus code!");
}
}
}
class. The fact that it is abstract is likely irrelevant. I have a static
factory method in my abstract class that creates subclasses. The
constructor in my subclasses must be able to call the constructor in my base
class. For the factory method in my abstract class to call the constructor
on my subclasses, the constructor in the subclass MUST be public (or
internal). They cannot be private or protected. However, doen't that
basically defeat the purpose of factory? I'd love to be able to make all
these constructors private or similar so that someone can't create subclass
instances without using the Factory. If this was all in a separate DLL, I
suppose I'd be saved by "internal", but we have small team of developers
working on projects where that type of seperation really shouldn't be
necessary.
Suggestions? Code sample below ...
Thanks in advance.
Mark
public abstract class MyBase
{
protected string first;
public MyBase(string first )
{
this.first = first;
}
public static MyBase Factory(int stateId)
{
switch (stateId)
{
case 700:
return new MySubClass1(first);
default:
throw new Exception("Bogus code!");
}
}
}