基类
public abstract class Animal
    {
        protected string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        public Animal()
        {
            name = "The animal with no name.";
        }
        public Animal(string newName)
        {
            name = newName;
        }
        public void Feed()
        {
            Console.WriteLine("{0}has been feeded",name);
        }
    }
派生类
 public class Cow:Animal
    {
        public void Milk()
        {
            Console.WriteLine("{0}has been milked", name);
        }
        public Cow(string newName):base(newName)
        { 
                                                   //这里不需要写name=newName,就可以初始化Cow类吗?
        }
    }

解决方案 »

  1.   

    base(newName)
    不需要,因为你已经调用了基类的构造函数,且基类构造函数已经对name进行了赋值
      

  2.   

    基类中编写构造函数时,派生类没有指定调用构造哪个构造函数时无参的构造函数
    派生类中可以指定调用基类的某个构造函数,使用base关键字
      

  3.   

    class father
    {
      public father()
      {
        Console.WriteLine("father!");
      }
      protected father(int x){}
    } class child: father
    {
      public child() : base(0) 
      {
      }
      static void Main()
      {
        new child();
      }
      

  4.   

    C# 中子类实例化时,是先构造父类方法,再构造子类方法,且默认调用父类的无参构造函数。除非,你自己制定 如  :base(newName)
    这里你指定了调用父类的 有参构造函数,所以已经赋值完了。