c#嵌套访问器?

时间:2013-06-02 06:27:49

标签: c# nested accessor

我知道该怎么做:

Class class = new Class();

class.Accessor

我不知道该怎么做:

class.Property.Accessor
class.Property.Subproperty.Accessor
class.Property.Subproperty.YetAnotherSubproperty.Accessor

比喻示例:

ListBox.Items.Count

一个类比来帮助解释(不要从字面上理解),我知道如何创建ListBox,我知道如何创建Count,但我不知道如何创建Item

4 个答案:

答案 0 :(得分:1)

这样的东西
class Animal
{
  // gets the heart of this animal
  public HeartType Heart
  {
    get
    {
      ...
    }
  }
}

class HeartType
{
  // gets the number of beats per minute
  public int Rate
  {
    get
    {
      ...
    }
  }
}

然后a给出var a = new Animal();你可以说

int exampleRate = a.Heart.Rate;

答案 1 :(得分:0)

嗯,你的问题很神秘,但我会试试。

子属性只是具有自己属性的其他类(或静态类)的实例。

示例:

class Class1
{
  public Class2Instance{get;set;} 

  public Class1()
  {
    Class2Instance =new Class2();     
  }
}

class Class2
{
  public string Greeting = "Hello";
}

//////
var c = new Class1();
Console.WriteLine(c.Class2Instance.Greeting);

答案 2 :(得分:0)

我不确定我是否理解你的问题。但在你的类比中,Items是ListBox的属性/字段,属性/字段的类型可能是某些集合。该集合具有Count属性。

答案 3 :(得分:0)

我最近回答了类似的问题,但更多的是使用名为FluentInterface 样式的方法链接。

在你的情况下,似乎你试图调用属性/公共字段,它们是类型的一部分;并且这些类型以嵌套方式引用。考虑到这一点,这个想法可以在下面证明;

class Program
    {
        static void Main(string[] args)
        {
           var one=new LevelOne();
           Console.WriteLine(one.LevelTwo.LevelThree.LastLevel);

        }
    }

    internal class LevelOne
    {
        public LevelOne()
        {
            LevelTwo = LevelTwo ?? new LevelTwo();
        }
        public LevelTwo LevelTwo { get; set; }
    }
    internal class LevelTwo
    {
        public LevelTwo()
        {
            LevelThree = LevelThree ?? new LevelThree();
        }
        public LevelThree LevelThree { get; set; }
    }
    internal class LevelThree
    {
        private string _lastLevel="SimpleString";
        public String LastLevel { get { return _lastLevel; } set { _lastLevel = value; } }
    }