类属性不可访问

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

我目前有一个类,首先看起来像这样:

public class Controller
{
    public class Configuration
    {
        // Properties of the Database
        public string Name { get; set; }
        public string BusinessID { get; set; }
        public string Address { get; set; }
    }

然后,我有几个函数实际将数据绑定到属性 - 工作正常。但是,我似乎找不到有关访问类属性的任何文档。我试过:

Controller ctrl;
ctrl = new Controller();

但是,ctrl 不保存任何这些值/属性;也不保存 Configuration 类。

这种结构是否有问题,这就是为什么无法访问Configuration,或者任何人都可以帮助我找到获得NameBusinessIDAddress的解决方案?

编辑:我想在aspx.cs文件中获取类外的属性。

提前谢谢。

类属性不可访问

类只是实际实例的蓝图。您的代码定义了两个类,但封闭的类(控制器)没有访问封闭的内部类的属性(配置)

如果要设置/获取属于控制器类实例的配置类实例的属性,则应在"配置"类型的控制器类中声明成员属性

public class Controller
{
    public class Configuration
    {
        // Properties of the Database
        public string Name { get; set; }
        public string BusinessID { get; set; }
        public string Address { get; set; }
    }
    // If you don't want external code set the internal instance remove the set method 
    public Configuration ctrlConfig {get;set;}
    public Controller()
    {
         // Remember to initialize the inner instance of the configuration
         ctrlConfig = new Configuration()
    }
}

现在在其他地方

Controller ctrl;
ctrl = new Controller();
ctrl.ctrlConfig.Name = "YourConfigName";

如果我正确理解了您的用例,那么下面是一种方法。

您可以通过以下方式为第二个类创建实例:

Controller.Configuration ac = new Controller.Configuration();

试试这个:

public class Controller
{
    Configuration c;
    public class Configuration
    {
        // Properties of the Database
        public string Name { get; set; }
        public string BusinessID { get; set; }
        public string Address { get; set; }
    }

}

然后,您将能够访问这些值:

  Controller ctrl = new Controller();
            ctrl.c = new Configuration();

我认为您的目标是此设置:

public class Controller
{
    public Controller()
    {
        this.Config = new Configuration();
    }
    public Configuration Config { get; set; }
}
public class Configuration
{
    public string Name { get; set; }
    public string BusinessID { get; set; }
    public string Address { get; set; }
}

然后你可以这样做:

Controller ctrl;
ctrl = new Controller();
Console.WriteLine(ctrl.Configuration.Name);

在原始代码中,在另一个类中定义了一个类。在我的示例中,Controller有一个类型 Configuration 的属性,该属性在构造函数 (public Controller() ) 中实例化。

您已经定义了一个类(控制器)和一个内部类(控制器.配置)

因此,您定义的属性是类 Controller.Configuration 的域,而不是控制器的域。

所以你应该:

// istantiate a controller.configuration instance
Controller.Configuration p = new Controller.Configuration();
// and use his properties
p.Name = "test";

或者,您可以在控制器中创建配置类型的属性,您可以使用它。

public class Controller
{
    public Controller()
    {
        Config = new Configuration();
    }
    public class Configuration
    {
        // Properties of the Database
        public string Name { get; set; }
        public string BusinessID { get; set; }
        public string Address { get; set; }
    }
    public Configuration Config { get; set; }
}

// istantiate a controller.configuration instance
Controller cont = new Controller();
// and use his properties
cont.Config.Name = "test";

要让它工作,有两种可能性(从您期望的问题中不清楚)

1. 无罪

您需要 Configuration 类的实例,并在构造函数中对其进行初始化

public Configuration Configuration_Instance {get;set;}
public Controller() {
  Configuration_Instance = new Configuration();
}

和使用

ctrl.Configuration_Instance.Name //etc.

2. 使用静态

使Configuration静态

public static class Configuration {
    public static string Name { get; set; }
    public static string BusinessID { get; set; }
    public static string Address { get; set; }
}

和使用

ctrl.Configuration.Name //etc.