接口实例创建是否也会为它创建类型对象指针?

时间:2014-04-12 19:09:47

标签: c# oop

当不需要具体实现时,使用接口而不是抽象类会导致不为基类创建单独的类型对象(作为将要使用的接口)吗?

示例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

1 个答案:

答案 0 :(得分:1)

在这两种情况下,将为Manager类创建将创建的唯一Type对象。这将描述Manager的成员,无论它们是否在类本身中实现,是从基类继承还是构成接口实现。

Type对象中,您可以获得基础clas的Type对象(通过BaseType属性),或者它实现的接口的Type对象(通过GetInterfacesFindInterfaces方法),可以过滤成员列表以包含或排除继承的成员(通过BindingFlags参数到GetMembers),但是& #39;仍然是代表Type类的Manager对象。