我有一个类,我想在一个装饰器/适配器中扩展功能,只是我不希望我的扩展类必须知道它正在扩展的类的类型,我不我想要为我想要扩展的每种类型的对象编写一个新类.但是,我想要扩展的所有对象共享一个共同的基类Team.这对于使用泛型来说听起来很成熟,所以这是我最初的想法:
public class TournamentTeam<T> : T where T : Team { private int mSeed; public TournamentTeam(T team,int seed) : base(team) { /* * error checking stuff here */ // set class variables this.mSeed = seed; } public int Seed { get { return this.mSeed; } } }
这可以做我想要的,就像现在如果我想访问T的成员,新类拥有所有这些.基础构造函数将负责以某种方式设置状态,以便扩展类不需要担心它.我也不必知道要覆盖哪些方法以指向装饰器/外观类型方式的内部对象.不用说,这没有编译.所以,我尝试了一些不同的东西.
public class TournamentTeam<T> : Team where T : Team { #region class variables private int mSeed; private T mTeam; #endregion public TournamentTeam(int seed,T team) : base(team) { /* * error checking stuff here */ // set class variables this.mSeed = seed; this.mTeam = team; } public int Seed { get { return this.mSeed; } } public T Team { get { return this.mTeam; } } }
好的,现在如果我想获得“基类”的功能,我只需要调用Team属性,我很高兴.而且,由于它是通用的,我不需要做任何拳击来获得功能.它工作,它不是很漂亮,但它的工作原理.
这有什么样的模式,如果存在,你会看到这个想法有什么陷阱?有没有更好的方法来实现这一目标?
解决方法
这是我应该做的事情
“赞成合成而非继承”主体和“策略”模式(如果我没有记错)
“赞成合成而非继承”主体和“策略”模式(如果我没有记错)
我也喜欢这个意思.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。