在没有构造函数参数的情况下创建 class 的变量
Create variable of class without the parameters of it's constructor
我有一个带有构造函数和一些参数的 BaseClass,然后我想根据枚举创建一个派生的 class 或另一个(该 BaseClass 的)策略,但具有相同的参数。有什么方法可以重构这个吗?谢谢!
public enum GameMode
{
ModeA,
ModeB
}
public abstract class BaseClass
{
public BaseClass(int a, string b, char c)
{
}
}
public class FirstGameMode : BaseClass
{
public FirstGameMode(int a, string b, char c) : base(a, b, c)
{
}
}
public class SecondGameMode: BaseClass
{
public SecondGameMode(int a, string b, char c) : base(a, b, c)
{
}
}
public class TestingPurpose
{
private GameMode _gameMode;
private BaseClass _baseClass;
public void Init()
{
if (_gameMode == GameMode.ModeA)
{
// They use the same variables !
_baseClass = new FirstGameMode(5, "Hello", 'c');
}
else
{
// They use the same variables !
_baseClass = new SecondGameMode(5, "Hello", 'c');
}
}
}
我尝试了一些反思,但还是做不到。
我想要类似的东西
public void Init()
{
BaseMatchMode type;
if (_gameMode == GameMode.ModeA)
{
type = typeof(FirstGameMode);
}
else
{
type = typeof(SecondGameMode);
}
_baseClass = new type(5, "Hello", 'c');
}
您可以使用工厂委托方法;
Func<int a, string b, char c, BaseClass> factory;
if (_gameMode == GameMode.ModeA)
{
factory= (a, b, c) => new FirstGameMode(a, b, c);
}
else
{
factory= (a, b, c) => new SecondGameMode(a, b, c);
}
_baseClass = factory(5, "Hello", 'c');
对于这样一个简单的示例,跳过工厂方法并直接创建对象可能会更容易。但是如果你想在组件之间添加一些抽象,这种技术有时很有用。
您还可以创建工厂 class 而不是仅使用委托。还有依赖注入 (DI) / 控制反转 (IoC) 框架,旨在解决指定 interfaces/base class 其他组件应该使用什么实现的问题。
我有一个带有构造函数和一些参数的 BaseClass,然后我想根据枚举创建一个派生的 class 或另一个(该 BaseClass 的)策略,但具有相同的参数。有什么方法可以重构这个吗?谢谢!
public enum GameMode
{
ModeA,
ModeB
}
public abstract class BaseClass
{
public BaseClass(int a, string b, char c)
{
}
}
public class FirstGameMode : BaseClass
{
public FirstGameMode(int a, string b, char c) : base(a, b, c)
{
}
}
public class SecondGameMode: BaseClass
{
public SecondGameMode(int a, string b, char c) : base(a, b, c)
{
}
}
public class TestingPurpose
{
private GameMode _gameMode;
private BaseClass _baseClass;
public void Init()
{
if (_gameMode == GameMode.ModeA)
{
// They use the same variables !
_baseClass = new FirstGameMode(5, "Hello", 'c');
}
else
{
// They use the same variables !
_baseClass = new SecondGameMode(5, "Hello", 'c');
}
}
}
我尝试了一些反思,但还是做不到。
我想要类似的东西
public void Init()
{
BaseMatchMode type;
if (_gameMode == GameMode.ModeA)
{
type = typeof(FirstGameMode);
}
else
{
type = typeof(SecondGameMode);
}
_baseClass = new type(5, "Hello", 'c');
}
您可以使用工厂委托方法;
Func<int a, string b, char c, BaseClass> factory;
if (_gameMode == GameMode.ModeA)
{
factory= (a, b, c) => new FirstGameMode(a, b, c);
}
else
{
factory= (a, b, c) => new SecondGameMode(a, b, c);
}
_baseClass = factory(5, "Hello", 'c');
对于这样一个简单的示例,跳过工厂方法并直接创建对象可能会更容易。但是如果你想在组件之间添加一些抽象,这种技术有时很有用。
您还可以创建工厂 class 而不是仅使用委托。还有依赖注入 (DI) / 控制反转 (IoC) 框架,旨在解决指定 interfaces/base class 其他组件应该使用什么实现的问题。