我有以下代码。
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的所有内容?
由于
答案 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
关键字。