日期:2014-05-18  浏览次数:20728 次

小白问个继承的小问题
就是有个父类CLASS A,有属性path 和 name,
完了有子类B 和C 都要继承A这两个属性,还有自己其他的属性

但是父类的name 是可以从path处理的,
就是
Class a
{
  protected info(string path)
  {
  this.path = path;
  this.name = Getname(path);
  }
}

然后在B类继承的时候,可不可以直接也只是传入path,就继承A的name属性呢?

这个应该怎么写啊?另外,A类的属性怎么定义呢?需要定义成抽象类么?

------解决方案--------------------
Getname在父类是公开的话
子类一样的用

------解决方案--------------------
你写的都是啥啊
------解决方案--------------------
然后在B类继承的时候,可不可以直接也只是传入path,就继承A的name属性呢?


可以:子类通用父类构造器来构造

这个应该怎么写啊?另外,A类的属性怎么定义呢?需要定义成抽象类么?
直接子类的初始化函数后加构造器来完成

A类的属性自己定义,不需要定义为抽象的。
------解决方案--------------------
没怎么看明白什么意思,好像你的意思是说,子类继承父类方法处理之后的属性值
public class a
{
protected virtual info(string path)

this.path = path;
this.name = Getname(path);

}


public class b:a{
protected override info(string path)
{
base.info(path);//这里是调用的父类的方法

}
}

------解决方案--------------------
子类继承了父类的除private方法和属性。
------解决方案--------------------
public setinfo(string a,string b):base(a){}这样可以。
------解决方案--------------------
C# code

    abstract class A
    {
        protected virtual void Info(string path)
        {
            this.Path = path;
            this.Name = path + "11111";
        }

        protected string Path { get; set; }
        protected string Name { get; set; }
    }

    class B:A
    {
        internal void ShowName()
        {
            this.Info("abc");
            Console.WriteLine(this.Name);
        }
    }

------解决方案--------------------
你的意思是重载么?
------解决方案--------------------
真不是很懂,貌似你可以用super的方法放在那个子类中去