2016-06-15 7 views
3

サブクラスはメインクラスから派生したものではありません。私はこれを入力しメインクラスのプロパティがfalseに設定されている場合、メインクラスのサブクラスの値を使用します。

たとしても、私はそれが不可能であること見ることができますが、私はいくつかのクラスがあります。

public class TransferServiceInformation { 
    public int ProviderId { get; set; } 
    public string PrePurchaseOverride { get; set; } 
    public bool PrePurchaseOverrideEnabled { get; set; } 
} 

public class TransferServiceProviderInformation { 
    public int ProviderId { get; set; } 
    public string PrePurchaseInfo { get; set; } 

そして、私はそれをしたいので、私が今までのアクセスmyTransferServiceInformation.PrePurchaseOverrideにしようとしPrePurchaseOverrideEnabled == false同じIDを持つTransferServiceProviderInformationからPrePurchaseInfoを返す必要があります。

これも可能ですか?

私はちょうど引数として渡されたTransferServiceProviderInformationが必要なゲッターが機能するかもしれないと思っています。そしてIDが一致しない場合は例外をスローします。それが唯一の解決策ですか?問題は、私が(あるいは他の誰かが)このプロパティを呼び出したすべての場所を変更するために、(何千もの)コードをすべて掘り起こす必要がないということです。

+0

私は両方のクラスのインスタンスを作成していると思います。 'PrePurchaseOverride'を' Instance1'でアクセスすると、このクラスは 'TransferServiceProviderInformation'の' Instance2'の存在をどう知っていますか?それらのインスタンスはリストのどこかに保存されていますか? – C4u

+0

@ C4uまあまあ、これは私が不可能だと思っていた理由です。いいえ、彼らは静的リストや何らかの種類のものではありません(少なくともコードの95%に慣れていないので、少なくとも保証できません)。私はgetterをプライベートに設定し、引数として渡される '親'の 'TransferServiceProviderInformation'を必要とする新しいメソッドを作成することが私の唯一の解決策になると思います。 –

+0

ああ。だから私は少なくとも正しい点にいる。私は考えがある。いくつかの秒で投稿します。 – C4u

答えて

1

は、これは単なるアイデアです:

は、クラス内のインスタンスを持つ静的なリストを作成し、コンストラクタを使用して、それを自動入力します。次に、同じIDを持つインスタンスの外側からこのリストをチェックすることができます。 TO-DOの

public class TransferServiceInformation 
{ 
    public int ProviderId { get; set; } 

    private string prePurchaseOverride; 
    public string PrePurchaseOverride 
    { 
     get 
     { 
      if(!PrePurchaseOverrideEnabled) 
      { 
       // Get instances from the other class where providerID matches 
       var instance = TransferServiceProviderInformation.Instances.Where(i => i.ProviderId == this.ProviderId).FirstOrDefault(); 
       if(instance != null) 
       return (instance).PrePurchaseInfo; 
      } 
      return null; // If no match found 
     } 
     set 
     { 
      prePurchaseOverride = value; 
     } 
    } 

    private bool prePurchaseOverrideEnabled; 
    public bool PrePurchaseOverrideEnabled { get; set; } 
} 

public class TransferServiceProviderInformation 
{ 
    // Store your instances static 
    public static List<TransferServiceProviderInformation> Instances { get; set; } 

    public TransferServiceProviderInformation() 
    { 
     // Add every new instance to the list 
     Instances.Add(this); 
    } 

    public int ProviderId { get; set; } 
    public string PrePurchaseInfo { get; set; } 
} 

インスタンスが配置されます場合は、インスタンスのリストから削除します。

関連する問題