从子类继承超类属性
本文关键字:属性 超类 继承 子类 | 更新日期: 2023-09-27 18:36:35
我是C#的新手,正在试验它。
我有一个超级Form
,有一个物业FormID
。 Form
由其他 4 个子类继承。
Form-> DeployForm -> SystemOut
和 Form_> Colection -> SystemIn
.
如何从子类访问属性FormID
?(DeployForm
,SystemOutColection
,Collectiom
和SystemIn
?
// Superclass - Form.
public class Form
{
private int _FormID;
private string _UserName;
private string _ComputerName;
private string _AssetTag;
private string _Department;
private string _Status;
// Below are the associations I linked
// to other classes that don't require attribute FormID.
private FormCategory _differentiateBy;
private CheckList _referencesToChecklist;
private Staff _referencesToStaff;
public Form()
{
_differentiateBy = new FormCategory();
_referencesToChecklist = new CheckList();
_referencesToStaff = new Staff();
}
public int FormID
{
get { return _FormID; }
set { _FormID = value; }
}
}
// Sub Class - DeploymentForm
public class DeploymentForm : Form
{
private DateTime _DeployDate;
private int _DeployBy;
private DateTime _SetupDate;
private int _SetupBy;
public DeploymentForm()
{
}
public DateTime DeployDate
{
get { return _DeployDate; }
set { _DeployDate = value; }
}
public int DeployBy
{
get { return _DeployBy; }
set { _DeployBy = value; }
}
public DateTime SetupDate
{
get { return _SetupDate; }
set { _SetupDate = value; }
}
public int SetupBy
{
get { return _SetupBy; }
set { _SetupBy = value; }
}
}
// etc...
因为 FormID
属性具有public
范围,所以它可以像普通成员一样在子类中访问。只是做,
this.FormID
编辑 回应OP的评论。
如果子类中的构造函数public
默认值(无参数)和空的,就像你的一样,那么它是多余的。可以并且应该删除空public
默认构造函数。
如果你想做一个public
默认的构造函数来做某事,那就去做吧。基类上的默认构造函数(如果存在)将在实例化子类时隐式调用。
如果基类没有可访问的默认构造函数,或者您想使用某些参数调用非默认构造函数,则可以在子类构造函数定义中指定调用。
public class BaseClass
{
protected BaseClass(int p)
{
}
}
public class SubClass : BaseClass
{
public SubClass()
: base(int.MinValue)
{
}
public SubClass(int p)
: base(p)
{
}
}
补救措施,如果一个类没有构造函数,则隐含public
默认的空构造函数。如果指定了任何构造函数,则会删除该含义。
您只需像引用任何其他属性一样引用它:
DeploymentForm deploymentForm = new DeploymentForm();
var x = deploymentForm.FormID;
你不需要任何特别的东西:
public class DeployForm : Form
{
public void DoStuff()
{
System.Console.WriteLine("{0}", FormID);
}
}
顺便说一句,你想了解 C# 中的自动属性 - 没有必要为每个属性都有一个显式的支持字段。