3

我正在尝试了解基本构造函数的实现。考虑这种情况如果我有基类运动

public class Sport 
{
   public int Id { get; set; }
   public string Name { get; set; }

   public Sport() 
   {
      Console.WriteLine("Sport object is just created");
   }

   public Sport(int id, string name) 
   {           
      Console.WriteLine("Sport object with two params created");
   }
}

现在我有一个继承 Sport 类的篮球类,我想在篮球对象初始化时使用带有两个参数的第二个构造函数。

public class Basketball : Sport
{    
    public Basketball : base ( ???? )
    {
       ?????
    }
}

首先我想使用私有字段 int _Id 和 string _Name 并在构造函数调用中使用它们

public Basketball : base ( int _Id, string _Name )
{
   Id = _Id;
   Name = _Name;
}

但这对使用继承没有意义,所以请在这个例子中解释一下。

更新 谢谢大家,我正在使用这样的代码,没关系。

public Basketball(int id, string name) : base (id, name)
{
   Id = id;
   Name = name;
}

只是为了确保,在这一行中 public Basketball(int id, string name) : base (id, name),我声明了变量 id、name,因为我的原始变量是大写的 var,并在 base (id, name) 上用作参数来命中我的基本构造函数。

谢谢大家。,很有帮助/

4

5 回答 5

4

您要求的构造函数如下:

public Basketball(int id, string name) : base(id,name) {}
于 2012-10-22T16:00:30.470 回答
3

如果基values类构造函数没有任何variables.derives classbase class constructordefault parameterless constructor

您不需要在基本构造函数调用中声明任何内容

base 关键字的主要目的是调用base class constructor.

通常,如果您不声明自己的任何构造函数,编译器会default constructor为您创建一个。

但是如果你定义了你自己的构造函数parameter,那么编译器就不会创建default parameterless constructor.

因此,如果您没有在基类中声明默认构造函数并且想要调用具有参数的基类构造函数,则必须调用该基类构造函数并通过base关键字传递所需的值

像这样做

public Basketball() : base (1,"user")

或者

public Basketball(int id,string n) : base (id,n)

或者

public Basketball(int id,string n) : base ()

或者

public Basketball() : base ()

类似于

public Basketball()//calls base class parameterless constructor by default

这完全取决于您希望类在类被实例化时的行为方式derived

于 2012-10-22T16:02:27.077 回答
2

构造函数不是继承的——这就是为什么你必须调用基础构造函数来重用它。如果您不想做任何与基本构造函数不同的操作,只需使用:

public Basketball( int id, string name ) : base ( id, name )
{

}

您的示例有点误导,但是因为您没有在基本构造函数中使用idandname参数。一个更准确的例子是:

public Sport(int id, string name) 
{           
    Console.WriteLine("Sport object with two params created");

    Id = id;
    Name = name;
}
于 2012-10-22T16:01:31.283 回答
1

您需要在篮球的构造函数中获取相同的参数:

public Basketball(int id, string name) : base(id, name)

或者以某种方式获取构造函数中的值,然后通过属性设置它们:

public Basketball()
{
    int id = ...;
    string name = ...;

    base.Id = id;
    base.Name = name;
}
于 2012-10-22T16:03:40.067 回答
0

关键字base允许您指定要传递给基本构造函数的参数。例如:

public Basketball(int _Id, string _Name) : base (_Id, _Name )
{
}

将使用 2 个参数调用您的基本构造函数,并且:

public Basketball(int _Id, string _Name) : base ()
{
}

将不带参数调用您的基本构造函数。这真的取决于你想打电话给哪一个。

于 2012-10-22T16:02:49.087 回答