我有一個帶有建構式和一些引數的 BaseClass,然后我想做一個策略,根據列舉,它創建一個或另一個(該 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');
}
uj5u.com熱心網友回復:
您可以使用工廠委托方法;
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');
對于這樣一個簡單的示例,跳過工廠方法并直接創建物件可能會更容易。但是,如果您想在組件之間添加一些抽象,這種技術有時會很有用。
您還可以創建工廠類,而不僅僅是使用委托。還有依賴注入 (DI) / 控制反轉 (IoC) 框架,旨在解決指定其他組件應使用的介面/基類的實作的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/453136.html
上一篇:從派生類成員初始化基類參考
下一篇:如何在C 中呼叫基類方法?
