using System;class Employee
{
    public Employee(string name)
    {
        this.Name = name;
    }    protected string Name;    public string name
    {
        get
        {
            return this.Name;
        }
    }    public void calculatPay()
    {
        Console.WriteLine("Employee.calculatPay call for {0}",name);
    }}class ContractEmployee : Employee
{
    public ContractEmployee(string name)
        : base(name)
    { }
    public new void calculatPay()  // 请问下,这个name的值是通过什么得到的?希望各位解释下:我能理解的地方:1,ContractEmployee构造函数中的
                                        // name 指示的是下面输出行参数里的name.
    {                               //name 就是自动传递给Employee中的构造函数。 2,基类会把name的值赋值给基类中的name属性。
        Console.WriteLine("ContractEmployee.calculatPay call for {0}", name);  //3,继承类中是否会包含基类中的所有成员(这个例子)?
    }}class SalariedEmployee : Employee
{
    public SalariedEmployee(string name)
        : base(name)
    { }
    public new void calculatPay()
    {
        Console.WriteLine("SalariedEmployee.caculatPay call for {0}",name);
    }
}class poly2App
{
    protected Employee[] employees;    public void LoadEmployees()
    {
        employees = new Employee[2];
        employees[0] = new ContractEmployee("Kate Green");
        employees[1] = new SalariedEmployee("Tom");
    }    public void Dopayroll()
    {
        foreach (Employee emp in employees)
        {
            emp.calculatPay();
        }
    }    public static void Main()
    {
        poly2App poly2 = new poly2App();
        poly2.LoadEmployees();
        poly2.Dopayroll();
    }
}

解决方案 »

  1.   

    name 就是自动传递给Employee中的构造函数。 2,基类会把name的值赋值给基类中的name属性。
    =====================================================
    name就是基类Employee中的属性
      

  2.   

    //3,继承类中是否会包含基类中的所有成员(这个例子)?
    任何情况下 子类 都是继承了 父类 的所有成员变量。
    但是遇到 私有 字段的时候 子类 不能调用。也就是所并不是所有的 父类 成员变量子类都能用,但是却都是被继承下来了的。你这个列子问题:
    1.一个只读属性在构造函数中给属性赋值?????
        public string name
        {
            get
            {
                return this.Name;
            }
        }
    2.通常情况下我们都是把字段 作为 小写,属性首字母大写。你咋是反起的呢。我都看昏了。
      

  3.   

     public ContractEmployee(string name) : base(name)
     { }
    这句话其实就是将name变量传递给基类的构造函数的参数,而这里的name变量是由外界传入的参数,也就是当你运行new ContractEmployee("Kate Green")中的"Kate Green"在基类中有name属性和Name变量,当执行了构造函数后,Name变量中就有了值,然后通过
     Console.WriteLine("SalariedEmployee.caculatPay call for {0}",name);这句话则将name这个属性的值给取了出来
      

  4.   

    ContractEmployee("张三")
    |
    base("张三")
    |
    Employee("张三")
    |
    this.Name ="张三"
    |
    protected string Name="张三"Console.WriteLine("ContractEmployee.calculatPay call for {0}", name)
    ||
    public string name
        {
            get
            {
                return this.Name;
            }
        }
    ||
    protected string Name="张三"
      

  5.   

    首先
    public ContractEmployee(string name) : base(name) 
    { }
    这样写表名子类的构造函数调用的是基类的,你前面说“ContractEmployee构造函数中的name 指示的是下面输出行参数里的name.”
    我觉得不对。输出行里的“name”,应该是属性name,而不是外界传进来的参数(当然,构造函数需要引入外来参数)。
    你可能是对“:base(name)”这个用法有误解,那只是调用基类的构造函数来构造子类,并没有对基类有什么操作。
      

  6.   

    1、public ContractEmployee(string name) : base(name) { } 在执行时首先会调用父类的构造函数,并把name值赋给父类的Name属性
    2、Console.WriteLine("ContractEmployee.calculatPay call for {0}", name);这个name调用的并不是构造函数里的,而是从父类中继承下来的
       public string name{get{return this.Name;}}的属性
    3、子类继承父类,子类它并不能继承父类的所有成员,例如说父类中有一个私有成员,则子类是不会把父类的私有成员继承下来的
       
       你所举的例子并不是方法重载的例子,你还得多看看 方法重载、方法重写、方法覆盖之间的区别