在C#中访问子类的属性

时间:2015-12-16 21:23:57

标签: c#

我把头撞在墙上似乎是一件非常简单的事情,但显然有一些小的东西让我无法工作。

我有以下代码

public class PagedListArgs
{
     public class DataViewParts
     {
         private string _type;
         public string Type
         {
             get { return _type; }
             set { _type = value; }
         }

         private string _filter;
         public string Filter
         {
             get { return _filter; }
             set { _filter = value; }
         }  
     }
}

稍后我会按如下方式使用这些:

PagedListArgs pagedListArgs = new PagedListArgs(...);
pagedListArgs.DataViewParts.Type = pagedListArgs.DataViewParts.Type.ToLower();

我收到以下异常

'DataViewParts': cannot reference a type through an expression; try 'PagedListArgs.DataViewParts' instead

我做错了什么?

修改

好吧,我在解释我遇到的问题方面做得不好,这对我很重要。 基本上问题是每次尝试访问DataViewParts时都会触发DataViewParts的构造函数。将构造函数逻辑移动到PagedListArgs修复了我遇到的问题。

4 个答案:

答案 0 :(得分:3)

DataViewParts是一个类,而不是DataViewParts的一个实例,但是你试图以这种方式访问​​它。你想做这样的事吗?

public class PagedListArgs
{
     public PagedListArgs(){
         MyParts = new DataViewParts();
     }

     public DataViewParts MyParts { get; set; }

     public class DataViewParts
     {
         private string _type;
         public string Type
         {
             get { return _type; }
             set { _type = value; }
         }

         private string _filter;
         public string Filter
         {
             get { return _filter; }
             set { _filter = value; }
         }  
     }
}

答案 1 :(得分:2)

您只为DataViewParts创建了类,但没有为它创建实例。

将子类的实例添加到主类中,或者将属性设置为static。通过这种方式,可以通过类型名称本身访问它们

例如:

public class PagedListArgs
{
     public DataViewParts dataViewParts;

     public class DataViewParts
     {
         private string _type;
         public string Type
         {
             get { return _type; }
             set { _type = value; }
         }

         private string _filter;
         public string Filter
         {
             get { return _filter; }
             set { _filter = value; }
         }  
     }
}

然后您可以通过caliing

访问该实例
dataViewParts = new DataViewParty();
dataViewParts.DoStuff();

答案 2 :(得分:1)

您应该创建一个嵌套类的实例来获取它的属性。

public class PagedListArgs
{
     public DataViewParts viewParts;
     public class DataViewParts
     {
         private string _type;
         public string Type
         {
             get { return _type; }
             set { _type = value; }
         }

         private string _filter;
         public string Filter
         {
             get { return _filter; }
             set { _filter = value; }
         }  
     }
}

因此代码的第二部分变为

PagedListArgs pagedListArgs = new PagedListArgs(...);
pagedListArgs.DataViewParts.Type = pagedListArgs.viewParts.Type.ToLower();

答案 3 :(得分:1)

当您创建PagedListArgs的实例时,您不会创建DataViewParts的实例。

您的意思是,例如,在构造函数中设置属性:

public class PagedListArgs
{
     public DataViewParts DataViewParts { get; set; }

     public PagedListArgs(){
         DataViewParts = new DataViewParts();
     }

     public class DataViewParts
     {
         private string _type;
         public string Type
         {
             get { return _type; }
             set { _type = value; }
         }

         private string _filter;
         public string Filter
         {
             get { return _filter; }
             set { _filter = value; }
         }  
     }
}