【发布时间】:2017-10-28 08:52:10
【问题描述】:
我有一个接口IPopUp:
public interface IPopUp
{
bool IsCancelable {get;}
void Show();
void Close();
Action MainAction{ get; }
Action CancelAction{ get; }
}
我有几个实现:IfoPopUp、ErrorPopUp 和 LoadingPopUp
我正在使用PopUpManager 实例创建PopUps 的实例
public class PopUpManager
{
public void ShowPopUp<T>(string texto) where T:IPopUp
{
ShowPopup (()=>(IPopUp)Activator.CreateInstance (typeof(T)));
}
public void ShowPopUp<T>(string texto,Action mainAction)where T:IPopUp
{
ShowPopup (()=>(IPopUp)Activator.CreateInstance (typeof(T), mainAction));
}
public void ShowPopUp<T>(string texto,Action mainAction,Action cancelAction)where T:IPopUp
{
ShowPopup (()=>(IPopUp)Activator.CreateInstance (typeof(T), mainAction, cancelAction));
}
private void ShowPopup(Func<IPopUp> factoryFunc)
{
if (PopUpShowed != null) {
PopUpShowed.Close ();
}
IPopUp popUp = factoryFunc ();
popUp.Show ();
}
}
我不知道如何强制IPopUp 实现来实现我在PopUpManager 中使用的3 种构造函数。
抽象类将不起作用,因为它可以强制构造函数......
有什么想法吗?
【问题讨论】:
-
为什么要强制类有构造函数?如果不这样做会出现什么问题?
-
不幸的是,最好的答案是不要使用界面。不清楚为什么在这里使用一个而不是抽象基类。
标签: c# interface class-design abstract-class