当不需要具体实现时,使用接口而不是抽象类会导致不为基类创建单独的类型对象(作为将要使用的接口)吗?
示例1:
在上面的例子中,应该为两个类创建类型对象指针。
public abstract class Employee
{
public abstract string EmployeeName { get; set; }
public abstract double CalculateSalary();
}
public class Manager : Employee
{
public override string EmployeeName
{
get;
set;
}
public override double CalculateSalary()
{
return 10000;
}
}
示例2: 在上面的例子中,由于方法obj.GetType()只是指向实际的Manager类,因此不会为接口实例创建任何类型对象吗?
public interface IEmployee
{
string EmployeeName { get; set; }
double CalculateSalary();
}
public class Manager : IEmployee
{
public string EmployeeName
{
get;
set;
}
public double CalculateSalary()
{
return 10000;
}
}
我对为界面生成的IL感到有点困惑:(
.**class** interface abstract auto ansi nested public IEmployee
{
} // end of **class** IEmployee
答案 0 :(得分:1)
在这两种情况下,将为Manager
类创建将创建的唯一Type
对象。这将描述Manager
的成员,无论它们是否在类本身中实现,是从基类继承还是构成接口实现。
从Type
对象中,您可以获得基础clas的Type
对象(通过BaseType
属性),或者它实现的接口的Type
对象(通过GetInterfaces
或FindInterfaces
方法),可以过滤成员列表以包含或排除继承的成员(通过BindingFlags
参数到GetMembers
),但是& #39;仍然是代表Type
类的Manager
对象。