-1

我是 C# 新手并正在尝试它。

Form我有一个带有属性的超类FormIDForm被其他 4 个子类继承。

Form-> DeployForm -> SystemOutForm_> Colection -> SystemIn

如何FormID从子类访问该属性?( DeployForm, SystemOutColection,CollectiomSystemIn?)

//  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...
4

3 回答 3

0

您只需像任何其他属性一样引用它:

DeploymentForm deploymentForm = new DeploymentForm();
var x = deploymentForm.FormID;
于 2013-10-23T09:41:51.933 回答
0

你不需要任何特别的东西:

public class DeployForm : Form
{
    public void DoStuff()
    {
         System.Console.WriteLine("{0}", FormID);
    }
}

顺便说一句,您想了解 C# 中的自动属性 ​​- 不需要为每个属性都有一个显式的支持字段。

于 2013-10-23T09:42:45.413 回答
0

因为该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默认的空构造函数是隐含的。如果指定了任何构造函数,则删除隐含。

于 2013-10-23T09:59:59.030 回答