2009-05-18 16 views
1

私は、PDFを表すクラスを使用してPDFアプリケーションを作成しています。私はpdfのテキストボックスごとにプロパティを持っており、属性を使ってプロパティがマップされるpdfテキストボックスを指定しています。私のすべてのPDFは同じプロパティを持っていますが、pdfのテキストボックスには異なる名前が使用されています。だから、私が考えることができる唯一の解決策は、基本クラスを作成し、それぞれのアプリケーションタイプが私の基本クラスを拡張し、新しい属性値を投げるために各プロパティをオーバーライドすることでした。もっと簡単な方法はありますか?継承と属性の値

例(アプリケーション1とアプリケーション2間の唯一の違いは、「TextBox2を」に「のTextBox1」からITextField値の変化であることに注意してください:

public class Application 
{ 
    private string accountNumber; 
    public virtual string AccountNumber 
    { 
     get { return this.accountNumber; } 
     set { this.accountNumber = value; } 
    } 
} 

public class Application1 : Application 
{ 
    [ITextField("TextBox1")] 
    public override string AccountNumber 
    { 
     get 
     { 
      return base.AccountNumber; 
     } 
     set 
     { 
      base.AccountNumber = value; 
     } 
    } 
} 

public class Application2 : Application 
{ 
    [ITextField("TextBox2")] 
    public override string AccountNumber 
    { 
     get 
     { 
      return base.AccountNumber; 
     } 
     set 
     { 
      base.AccountNumber = value; 
     } 
    } 
} 

おかげ

答えて

0

を、私は、基本クラスが正しい選択ではなかったと言うでしょう。このようなスキームを定義するために、基本クラスに対してInterfacesを選択します。維持するコードが少なく、同じ効果が得られます。あなたが多数を持っている場合にも

public interface IApplication 
{ 
    string AccountNumber { get; set; }   
} 

public class Application1 : IApplication 
{ 
    [ITextField("TextBox1")] 
    public string AccountNumber { get; set; } 
} 

public class Application2 : IApplication 
{ 
    [ITextField("TextBox2")] 
    public override string AccountNumber { get; set; } 
} 

、テキストフィールドにプロパティをマッピングし、ちょうど派生クラスでそれを設定辞書を含むように、基本クラスのアイデアを使用することができます...これは本当に効率的ですこれを行うために必要な各フォームのプロパティ

public abstract class Application 
{ 
    public Application() { } 

    private Dictionary<string, string> mappings = new Dictionary<string, string>(); 

    public Dictionary<string, string> Mappings 
    { 
     get { return mappings; } 
    } 

    public string AccountNumber { get; set; } 

    protected abstract void ProvideMappings();   
} 


public class Application1 : Application 
{ 
    protected override void ProvideMappings() 
    { 
     Mappings.Add("AccountNumber", "TextBox1"); 
    } 
} 

public class Application2 : Application 
{ 
    protected override void ProvideMappings() 
    { 
     Mappings.Add("AccountNumber", "TextBox2"); 
    } 
} 

これらのいずれかが良いアイデアである場合は、もっと文脈が必要です。ユース・ケースはその詳細を運転するでしょう。たとえば、PropertyInfoをPDFフィールドの文字列名にマップすると、辞書はどのように使用するかによって異なります。

+0

私はそれぞれ約120フィールドの6種類のアプリケーションを持っています。私は基本クラスのルートに行くつもりだと思う。私はそれぞれにマッピングを提供するだけという考えが好きです。また、基本クラスでプロパティを定義して設定するコードを記述するだけで済みます。 – Striker

0

を、私はこれが悪い答えですが、ことを知っています

0

値が本当にシステムの一部であれば、それはおそらくプロパティとして持っています:

public string AccountNumber {get;set;} 
public string AccountNumberTextField {get;set;} 

次に、異なるプロパティを持つ2つのApplicationインスタンス(同じタイプ)を持つことができます。それは本当にコンテキストに依存します。

エリックリペットは、属性を使用するときに(としないように)上の良いブログがあります:あなたは、属性を使用しようとしている場合はProperties vs. Attributes

+0

私はこれも良い答えだと思う...それは彼がそれをどのように使用しているかによる。 –

関連する問題