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;
}
}
我试图通过员工类的实例访问 BenefitPackageLevel 类,如:
Employee emp= new Employee()
var benefitpackage= emp.BenefitPackage.BenefitPackageLevel.standard;
但为什么虽然我没有将 BenefitPackage 定义为静态成员,但我可以通过类级别访问它,如:
Employee.BenefitPackage.BenefitPackageLevel.standard
默认情况下,嵌套类是否可能是静态的?
答案 0 :(得分:4)
您不是以静态成员身份访问它。您正在通过其外部类型访问standard
。声明嵌套类型时,其范围仅限于外部类型,因此您必须通过其外部类型访问它。
例如,如果您要创建BenefitPackage
的实例,您应该这样做:
var benefitPackage = new Employee.BenefitPackage();
因此,当您想要standard
作为BenefitPackageLevel
枚举值访问时,您必须像这样使用它:
var temp = Employee.BenefitPackage.BenefitPackageLevel.standard;
外部类型无法访问嵌套类型,除非您将其公开。
请记住,当您创建外部类型的实例时,它不会创建其内部类型的实例。
答案 1 :(得分:1)
您的代码存在一些问题。首先,您需要对BenefitPackage
类进行此更改:
public class BenefitPackage
{
// Your code...
public BenefitPackageLevel Level { get; set; }
}
然后,您需要对Employee
类进行此更改并添加以下属性:
partial class Employee
{
// Your code...
public Employee()
{
this.EmoloyeeBenefitPackage = new BenefitPackage();
}
public BenefitPackage EmployeeBenefitPackage { get; set; }
}
现在你可以这样做:
var employee = new Employee();
employee.EmoloyeeBenefitPackage.Level = BenefitPackageLevel.Gold;
var level = employee.EmployeeBenefitPackage.Level;
答案 2 :(得分:0)
我觉得你很困惑。因为类型是在另一种类型中定义的,所以它并不意味着外部类型包含任何实例信息,除非明确定义了字段。
例如:
public class OutsideClass
{
// Define field or properties to store nested types
public Select Pick { get; set; }
public NestedClass Link { get; set; }
// Type definitions
public class NestedClass
{
}
public enum Select
{
None,
One,
Many,
All
}
}
class Program
{
static void Main(string[] args)
{
OutsideClass a = new OutsideClass();
a.Pick=OutsideClass.Select.Many;
a.Link=new OutsideClass.NestedClass();
}
}