家长和儿童班

时间:2015-09-29 05:51:00

标签: c#

我有以下代码。

using System;

public class Program
{
    public static void Main()
    {
        Employee FTE = new FullTimeEmployee();
    }

}

public class Employee
{
    public string FirstName;
    public string LastName;
    public void PrintFullName()
    {
        Console.WriteLine(FirstName + " " + LastName);
    }
}

public class FullTimeEmployee : Employee
{
    public float YearlySalary;
}

我只想澄清一件事。

如果我写Employee FTE = new FullTimeEmployee();,创建的对象只能访问FirstName,LastName,PrintFullName和NOT YearlySalary?

如果我写FullTimeEmployee FTE = new FullTimeEmployee();,创建的对象是否能够访问包含YearlySalary的所有内容?

由于

1 个答案:

答案 0 :(得分:2)

如果您通过FullTimeEmployee创建对象,则该对象为new FullTimeEmployee();。但是你没有只能访问声明类型。因此,如果您声明它:FullTimeEmployee FTE =您拥有完全访问权限,如果您将其声明为Emplyee FTE,则表示您没有。但你可以简单地把它丢回来。

第一个解决方案:

Employee FTE = new FullTimeEmployee();
var employee = (FullTimeEmployee)FTE;
var sal = employee.YearlySalary;

第二个解决方案

Employee FTE = new FullTimeEmployee();
var employee = (FTE as FullTimeEmployee)
var sal = employee.YearlySalary;

这应该都有效。这两者之间的区别在于,如果转换失败,as将不会抛出异常,它将只返回null。

在您的情况下,您可以查看var关键字。