访问C#中子类的属性

本文关键字:属性 子类 访问 | 更新日期: 2023-09-27 18:27:02

我的头撞在墙上,这似乎是一件非常简单的事情,但显然我缺少一些小东西来让它发挥作用。

我有以下代码

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时都会触发它的构造函数。将构造函数逻辑移到PagedListArgs中解决了我遇到的问题。

访问C#中子类的属性

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

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

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

要么将子类的一个实例添加到主类中,要么使属性成为静态的。通过这种方式,它们可以通过类型名称本身访问

例如:

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

然后您可以通过缩放来访问实例

dataViewParts = new DataViewParty();
dataViewParts.DoStuff();

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

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

创建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; }
         }  
     }
}