如何从类的实例访问嵌套类?

Moh*_*sen 5 .net c# nested

partial class Employee
{
    protected string empName;

    protected int empID = new int();

    protected float currPay;

    protected static int empAge;

    protected string empSNN;

   // these are nested classes

    public class BenefitPackage
    {
        // I want to access this class

        public enum BenefitPackageLevel
        {
            standard,Gold,Platinum
        }
        public double ComputePayDeduction()
        {
            return 125.0;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过employee类的实例访问BenefitPackageLevel类,例如:

Employee emp= new Employee() 
var benefitpackage= emp.BenefitPackage.BenefitPackageLevel.standard;
Run Code Online (Sandbox Code Playgroud)

但是为什么我没有将BenefitPackage定义为静态成员,却可以通过类级别访问它,例如:

Employee.BenefitPackage.BenefitPackageLevel.standard
Run Code Online (Sandbox Code Playgroud)

默认情况下,嵌套类是否可能是静态的?

Ham*_*jam 4

您没有作为静态成员访问它。您正在standard通过其外部类型进行访问。当您声明嵌套类型时,其范围仅限于外部类型,因此您必须通过其外部类型访问它。

例如,如果你想创建一个实例,BenefitPackage你应该这样做:

var benefitPackage = new Employee.BenefitPackage();
Run Code Online (Sandbox Code Playgroud)

因此,当您想standard作为枚举值进行访问时BenefitPackageLevel,必须像这样使用它:

var temp = Employee.BenefitPackage.BenefitPackageLevel.standard;
Run Code Online (Sandbox Code Playgroud)

外部类型无法访问嵌套类型,除非您将其公开。

请记住,当您创建外部类型的实例时,它不会创建其内部类型的实例。