0

ちょっとした初心者の質問。

支払いの基本クラスがあります。追加の追加機能を除いて、すべて同じプロパティを共有します。プロパティの1つはpostUrlです。ベースではこれは空ですが、子クラスではそれぞれに独自のURLがあります。これはクラスの外部からアクセスすることを許可されるべきではなく、修正されており、変更されるべきではありません。子クラスのプロパティをオーバーライドするにはどうすればよいですか?

例えば

class paymentBase
{
    public int transactionId {get;set;}
    public string item {get;set;}
    protected virtual postUrl = String.empty; // can't be accessed from outside inheritance / public / protected?

    public void payme();
}

class paymentGateWayNamePayment : paymentBase
{
    protected override postUrl { 
        get { return "http://myurl.com/payme"; }
    }
}

どうすればこれを行うことができますか?

前もって感謝します

4

3 に答える 3

7

postUrl次のように実際の仮想プロパティを作成すると、それを実現できるはずです。

class paymentBase
{
    public int transactionId {get;set;}
    public string item {get;set;}
    protected virtual postUrl { get { return String.Empty; }}

    public void payme();
}

class paymentGateWayNamePayment : paymentBase
{
    protected override postUrl {get { return "http://myurl.com/payme"; } }
}
于 2012-10-10T13:30:50.050 に答える
1

posturlは、ページポストバック、コントロールポストバック、クラスで使用される可能性があるなど、あらゆるもので使用できる汎用プロパティであるため、要件に基づいて、インターフェイスを使用することをお勧めします。このインターフェイスは、必要に応じて誰でも使用できます。クラス。

interface IPostUrl
{
    string postUrl { get; }
}

class paymentBase
{
    public int transactionId {get;set;}
    public string item {get;set;}
    public void payme(){}
}

class paymentGateWayNamePayment : paymentBase, IPostUrl
{
    public string postUrl
    {
        get { return "http://myurl.com/payme"; }
    }
}
于 2012-10-10T13:50:43.027 に答える
1

これが遅いエントリであることは知っていますが、postUrl値をサブクラスによって一度設定し、それから二度とそれを基本クラスのプライベート値にする必要がない場合。

abstract class paymentBase
{
    public paymentBase(string postUrl) { this.postUrl = postUrl; }
    public int transactionId { get; set; }
    public string item { get; set; }
    protected string postUrl { get; private set; }

    public void payme();
}

class paymentGateWayNamePayment : paymentBase
{
    public paymentGateWayNamePayment() : base("http://myurl.com/payme") {  }
}
于 2012-11-29T21:09:35.213 に答える