2013-06-02 63 views
-2

我知道该怎么做:c#嵌套访问器?

Class class = new Class(); 

class.Accessor 

我不知道该怎么做:

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

例子比喻:

ListBox.Items.Count 

一个比喻来帮助解释(不从字面上看),我知道如何创建列表框,我知道如何创建计数,但我不知道如何创建项目

+1

你想完成什么? – gdoron

+1

我不认为你需要在这里做任何特别的事情 - 只要在相关的类中公开属性。然后你可以将操作链接起来。 – aquaraga

+0

单词accessor非常具有误导性,实际上它应该是“成员”。 – David

回答

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

public Class2Instance {get; set} < - 这不会编译 – David

0

我不知道我是否正确地理解你的问题。但在你的比喻中,Items是ListBox的属性/字段,并且该属性/字段的类型可能是某个集合。并且该集合具有Count属性。

+0

这是最好的评论。 – David

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

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

int exampleRate = a.Heart.Rate; 
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; } } 
    }