访问对象中对象的属性

本文关键字:对象 属性 访问 | 更新日期: 2023-09-27 18:07:06

我有三个类MetaA, MetaB和MetaC。每个都有一些属性。

在某些情况下,只拥有一个包含所有三个Meta类的属性的类会很好,例如,称为metaccomposite。在复合类中,我尝试创建每个元a, B和C的实例,希望我可以访问如下属性:

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

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

这里正确的方法是什么?

访问对象中对象的属性

为所有三个Meta类创建接口并让metaccomposite类实现这三个接口怎么样?metaccomposite类可以实例化正确的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; }
    }
}

为什么所有属性都在类级别?为什么不直接用你写的东西呢?

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();
}