我有一个父类Customer有3个properties
**
CID,巴尔,CNAME
**
我有一个子类,它有一个属性Stats.now我想通过static void main从我的子类构造函数向父类constructor
提供值。
我想只从基类为父类构造函数提供值。我的代码如下
static void Main(string[] args)
{
Stat s1 = new Stat(false);//want to provide value to base class constructor from here only.
}
}
class Customer
{
int _Cid, _Bal;
string _Cname;
public int CID
{
get
{
return _Cid;
}
set
{
_Cid= value;
}
}
public int Bal
{
get
{
return _Bal;
}
set
{
_Bal = value;
}
}
public string Cname
{
get
{
return _Cname;
}
set
{
_Cname = value;
}
}
public Customer(int _Cid,int _Bal,String _Cname)
{
this._Cid=_Cid;
this._Cname = _Cname;
this._Bal = _Bal;
}
}
class Stat:Customer
{
bool _Status;
public bool Stats
{
get
{
return _Status;
}
set
{
_Status= value;
}
}
public void display()
{
}
public Stat(bool _Status):base(int _Cid, int _Bal, String _Cname) //child class constructor how can i supply value to parent class constructor.
{
this._Status = _Status;
}
}
你的基类构造函数是这样的:
public Customer(int _Cid,int _Bal,String _Cname)
你的派生类构造函数是这样的:
public Stat(bool _Status)
在C#中实例化派生类时,必须调用基类。在基类只有无参数构造函数的情况下,这是在执行派生类构造函数体之前隐式完成的。如果基类没有无参数构造函数,则必须使用base
显式调用它。
举个例子:
public enum MyEnum
{
Person,
Animal,
Derived
}
public class Base
{
public Base(MyEnum classType)
{
}
}
public class Person : Base
{
}
有两种方法可以做到这一点:接受Person
的参数并将其传递给基础构造函数:
public class Person : Base
{
public Person(MyEnum classType) : base(classType)
{
// this will be executed after the base constructor completes
}
}
或者通过对值进行硬编码(假设MyEnum包含值Person
):
public class Person : Base
{
public Person() : base(MyEnum.Person)
{
// this will be executed after the base constructor completes
}
}
请注意,您可以拥有多个构造函数,因此如果值应使用派生类的某些默认值进行实例化,则可以定义派生类使用的不同protected
构造函数。 protected
确保它只能由派生类调用,而不是任何调用new Base(...)
的人调用:
public class Base
{
private readonly MyEnum _classType;
public Base(MyEnum classType)
{
_classType = classType;
}
protected Base()
{
_classType = classType.Derived;
}
}
public class Person : Base
{
public Person() : base()
{
// this will be executed after the base constructor completes
}
}
基类和派生类中的参数数量之间没有关系。只存在一个简单的要求:派生构造函数必须调用(并满足任何参数要求)它的基类构造函数,其中基类构造函数接受参数,或者有多个。
在您的具体示例中,您可能打算这样做:
public Stat(bool _Status, int _Cid, int _Bal, String _Cname) : base(_Cid, _Bal, _Cname)
作为旁注,命名参数_Cid
有点奇怪。前缀_
通常表示它是类中的私有字段。正常的C#约定使用camel case(camelCaseArgumentName
)作为方法参数。