我们如何配置一个类的空可移动组件(对象字段)?
Posted
技术标签:
【中文标题】我们如何配置一个类的空可移动组件(对象字段)?【英文标题】:how can we configure null removable components(object field) of a class? 【发布时间】:2018-01-28 09:22:11 【问题描述】:假设我们有一个包含一些组件(对象字段)的类,其中一些可以为空(已删除) 是否适合创建没有(组件)字段的新类或使用接口来处理它。假设我们有几个可以为某些对象删除的组件 提前谢谢
public class Class1
Component1 component1;
Component2 component2;
Component3 component3;//can be null (removed)
Component4 component4;//can be null (removed)
public class Class2//removed component3,component4(new class)
Component1 component1;
Component2 component2;
public class Class3//removed component3(new class)
Component1 component1;
Component2 component2;
Component4 component4;
public class Class4//removed component4(new class)
Component1 component1;
Component2 component2;
Component3 component3;
或使用接口
public interface IComponent1
public class Component1:IComponent1
public class NoComponent1:IComponent1
public interface IComponent2
public class Component2:IComponent2
public class NoComponent2:IComponent2
public interface IComponent3
public class Component3:IComponent3
public class NoComponent3:IComponent3
public interface IComponent4
public class Component4:IComponent4
public class NoComponent4:IComponent4
public class Class1
IComponent1 componentBehaviour1;
IComponent2 componentBehaviour2;
IComponent3 componentBehaviour3;
IComponent4 componentBehaviour4;
或检查类方法中的空条件(如果需要)。
【问题讨论】:
您的问题主要基于意见,因此不适合 Stack Overflow。也就是说,我的观点是,如果字段总是未用于一组特定的对象,那么是的......将类分成单独的类很合适,其中的字段适合于每个单独的类的实例。另一方面,如果有一种情况,您必须将一个类的一个实例替换为某个其他类的一个实例,因为您最初有一个null
值并且不再这样做,反之亦然,那么不...不要那样做。
谢谢,但是如果我有几个具有相同字段的类,我如何访问不同类的对象字段(例如在循环中)。我应该用泛型为这些类实现 GetComponent() 吗?
“我有几个类具有相同的字段” -- 你为什么要这样做?如果它们是相同的字段,则将它们设为相同的类。如果由于某种原因它们不能是同一个类,那么考虑定义每个类都可以实现的接口,然后您可以在需要这些字段时使用该接口。
我说了一些!它是可以或不可以的组件。基于组件的设计模式
假设我们有一个类有 Displayable 字段 (Displayable displayable ) 而一个类没有。我想实现基于组件的类而不是继承。
【参考方案1】:
根据我的经验,最好遵循面向对象的原则。在您的情况下,我认为您应该首先为所有必填字段创建一个类:
public class Class1
Component1 component1;
Component2 component2;
然后为每个可为空的字段使用接口,例如:
public Interface interface1
Component1 component3;
然后是另一个界面,例如:
public Interface interface2
Component1 component4;
那么在你的课堂上你可以:
public class Class2: Class1, interface1
还有其他类,例如:
public class Class2: Class1, interface2
public class Class3: Class1, interface1, interface2
【讨论】:
组件字段进入界面?!您只能将接口方法和 getter setter 放入接口 接口中可以有Component的接口,比如IComponent
【参考方案2】:
可能听起来很傻,但是为什么不只使用一个类来公开一组组件呢? 像这样的:
public interface IComponent
public class Foo
private readonly IList<IComponent> _components;
public void AddComponent(IComponent component)
// do your magic here
public IEnumerable<T> GetComponents<T>() where T : IComponent
// do your magic here
【讨论】:
以上是关于我们如何配置一个类的空可移动组件(对象字段)?的主要内容,如果未能解决你的问题,请参考以下文章