-1

私はC#が初めてで、それを試しています。

Formプロパティを持つスーパークラスがありますFormIDForm他の 4 つのサブクラスに継承されます。

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

FormIDサブクラスからプロパティにアクセスするにはどうすればよいですか? ( DeployFormSystemOutColectionCollectiomおよび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...
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 に答える