c#嵌套访问器

本文关键字:访问 嵌套 | 更新日期: 2023-09-27 18:16:21

我知道怎么做:

Class class = new Class();
class.Accessor

我不知道该怎么做:

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

例子类比:

ListBox.Items.Count

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

c#嵌套访问器

类似

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
    {
      ...
    }
  }
}

对于var a = new Animal();给出的a你可以说

int exampleRate = a.Heart.Rate;

好吧,你的问题很难懂,但我会试试的。

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

的例子:

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

我不确定我是否正确理解了你的问题。但是在您的类比中,Items是ListBox的属性/字段,该属性/字段的类型可以是某个集合。这个集合有Count属性

我最近回答了类似的问题,但它更多地与称为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; } }
    }