2016-09-02 8 views
1

ここに私が現在取り組んでいるクラスのようなものがあります。ベースクラスまたは継承クラスの使用に関係なく、オペレータを実行しますか?

public class SomeClass 
{ 

    public PropertyAClass A { get; set;} 
    public PropertyBClass B { get; set;} 

    public SomeClass (PropertyAClass A, PropertyBClass B) 
    { 
     this.A = A; 
     this.B = B; 
    } 

    public static SomeClass operator +(SomeClass a, SomeClass b) 
    { 
     return new SomeClass(a.A + b.A, a.b + b.B); 
    } 
} 

public class DerivedClass : SomeClass 
{ 
    public DerivedClass (PropertyADerivedClass A, PropertyBDerivedClass B) : base(A,B) 
    { 
    } 

    //Operation is the same but I have to repeat the method 
    public static DerivedClass operator +(DerivedClass a, DerivedClass b) 
    { 
     return new DerivedClass(a.A + b.A, a.b + b.B); 
    } 
} 

ことが可能基本クラスに適用し、まだ出力として派生クラスを取得することによって派生クラスで演算子+を繰り返さないようにするだろういくつかのスマートな方法はありますか?

+2

あなたが交換する方法を把握しようとしています1つの非常に単純なコード行です。たとえ可能であったとしても、あなたがしようとするものは、劇的に*より複雑になることは確かです。 – Servy

+0

これは一例です。実際のコードでは、コード行はあまり「単純」ではありません。 – TTT

+0

これが代表でない場合、この問題の解決法はあなたを助けてくれません。冗長な作成作業を繰り返さないようにする方法は、その作成作業が何であるかに大きく依存することになります。 – Servy

答えて

0

私はC#コンパイラのリグを持っていませんが、心から何かを書きました。多分それは助ける

using System; 
using System.Reflection; 

public class SomeClass<T> 
{ 

    public PropertyAClass A { get; set;} 
    public PropertyBClass B { get; set;} 

    public SomeClass (PropertyAClass A, PropertyBClass B) 
    { 
     this.A = A; 
     this.B = B; 
    } 

    public static T operator +(T a, T b) 
    { 
     return new T(a.A + b.A, a.b + b.B); 
    } 
} 

public class DerivedClass : SomeClass<DerivedClass> 
{ 
    public DerivedClass (PropertyADerivedClass A, PropertyBDerivedClass B) : base(A,B) 
    { 
    } 
} 

:ジェネリック型のParam、そのようなものを使用してみてください

Pass An Instantiated System.Type as a Type Parameter for a Generic Class

http://www.dotnetperls.com/generic

https://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

+0

私はすでにこれを試みましたが、何らかの理由で私はそれを捨てる。私はもう一度それを試すかもしれない。 – TTT

+0

ニース、幸運。 http://stackoverflow.com/questions/1420581/inheritance-on-a-constrained-generic-type-parameter – Vitorlui

+1

そのコードはコンパイルされません... C#のジェネリックは非常に限られており、簡単に何かをすることはできませんこのような。一つのこととして、コンパイラは 'T'をメンバ' A'と 'B'、さらにはそれらの型として知りません。例えば、コードは明らかに 'SomeClass 'で動作しません。 – Phil1970

関連する問題