公共对象的继承
本文关键字:继承 公共对象 | 更新日期: 2023-09-27 18:17:21
我有以下场景,其中我检索了一组BaseObject类型的对象。我将这些对象按照Object1和Object2类型进行拆分。
现在我有两个类(Plugin1和Plugin2),根据特定的类型,即类型Object1或类型Object2处理这些列表。
正如您在代码中看到的,我需要在各自的类中声明不同的列表。
是否有一种方法可以在基类中设置减速?我仍然需要能够处理列表根据他们的类型在各自的类,即Plugin1和Plugin2。
public class BaseObject {}
public class Object1 : BaseObject {}
public class Object2 : BaseObject {}
public interface IPlugin
{
void Process();
}
public class BasePlugin : IPlugin
{
protected MyManager _manager;
public BasePlugin(MyManager manager)
{
this._manager = manager;
}
public virtual void Process() { }
}
public class Plugin1 : BasePlugin
{
private List<Object1> _list;
public Plugin1(MyManager manager, List<Object1> list)
: base(manager)
{
_list = list;
}
public override void Process()
{
base.Process();
}
}
public class Plugin2 : BasePlugin
{
private List<Object2> _list;
public Plugin2(MyManager manager, List<Object2> list)
: base(manager)
{
_list = list;
}
public override void Process()
{
base.Process();
}
}
您应该能够使IPlugin
接口通用,即
public interface IPlugin<T> where T: BaseObject
{
void Process();
}
public class BasePlugin<T> : IPlugin<T>
{
protected MyManager _manager;
protected List<T> _list;
public BasePlugin(MyManager manager, List<T> list)
{
this._manager = manager;
_list = list;
}
public virtual void Process() {... }
}
现在,如果Plugin1
和Plugin2
的代码相同,只是类型不同,它们就变成:
var plugin1 = new BasePlugin<Object1>();
var plugin2 = new BasePlugin<Object2>();
。您根本不需要这些类,只需在声明时指定类型即可。
泛型似乎已经完成了任务。
https://msdn.microsoft.com/en-us/library/512aeb7t.aspxpublic abstract class BaseObject {}
public class Object1 : BaseObject {}
public class Object2 : BaseObject {}
public interface IPlugin
{
void Process();
}
public class BasePlugin<T> : IPlugin where T : BaseObject
{
protected MyManager _manager;
protected List<T> _list;
public BasePlugin(MyManager manager, List<T> list)
{
this._manager = manager;
this._list = list;
}
public virtual void Process() { }
}
public class Plugin1 : BasePlugin<Object1>
{
public Plugin1(MyManager manager, List<Object1> list)
: base(manager, list) { }
public override void Process()
{
base.Process();
}
}
public class Plugin2 : BasePlugin<Object2>
{
public Plugin2(MyManager manager, List<Object2> list)
: base(manager, list) { }
public override void Process()
{
base.Process();
}
}