【问题标题】:Access properties of objects in an object访问对象中对象的属性
【发布时间】:2015-08-09 08:04:22
【问题描述】:

我有 3 个类 MetaA、MetaB 和 MetaC。每个都有许多属性。

在某些情况下,最好只有一个类包含所有三个 Meta 类的属性,例如 MetaComposite。在复合类中,我尝试创建和实例化每个 MetaA、B 和 C,希望可以像这样访问属性:

Meta Composite mc = new MetaComposite();
mc.MetaA.Property1 = "Hello";

由于 C# 不允许多重继承,那么创建一个由其他类组成的类的最佳方法是什么?我可以在复合类中放置字段并编写 getter 和 setter 来传递属性值,但这将是很多重复的代码。

这里的正确方法是什么?

【问题讨论】:

  • C#通过接口支持多重继承

标签: c# multiple-inheritance


【解决方案1】:

如何为所有三个 Meta 类创建接口并让 MetaComposite 类实现所有这三个接口。 MetaComposite 类可以实例化正确的 Meta 类并调用它来执行所需的属性。

这是一个例子:

public interface IMeta1
{
   int Metaproperty1 {get; set;}
}

public interface IMeta2
{
   int Metaproperty2 {get; set;}
}

public interface IMeta3
{
   int Metaproperty3 {get; set;}
}

public class MetaComposite : IMeta1, IMeta2, IMeta3
{
    private readonly Meta1 _meta1;
    private readonly Meta2 _meta2;
    private readonly Meta3 _meta3;

    public MetaComposite()
    {
        _meta1 = new Meta1();
        _meta2 = new Meta2();
        _meta3 = new Meta3();
    }

    public int Property1 
    {
        get { return _meta1.Property1; }
        set { _meta1.Property1 = value; }
    }

    public int Property2 
    {
        get { return _meta2.Property2; }
        set { _meta2.Property2 = value; }
    }

    public int Property3
    {
        get { return _meta3.Property3; }
        set { _meta3.Property3 = value; }
    }
}

【讨论】:

    【解决方案2】:

    在类级别上拥有所有属性的原因是什么? 为什么不直接使用您写的内容?

    class MetaComposite
    {
        public MetaAClass MetaA { get; private set; }
        public MetaBClass MetaB { get; private set; }
        public MetaCClass MetaC { get; private set; }
    
        public MetaComposite()
        {
             MetaA = new MetaAClass();
             MetaB = new MetaBClass();
             MetaC = new MetaCClass();
        }
    }
    
    public void Main()
    {
        var composite = new MetaComposite();
        composite.MetaA.Field1 = 1;
        composite.MetaB.Field2 = '2';
        composite.MetaC.Field3 = new MetaDClass();
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 2023-03-23
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多