2017-08-08 9 views
0

継承を使用せずに基本型を変更せずにオブジェクトメッセージにいくつかのプロパティを追加する方法についてです。 サービス層からフロントエンドにメッセージを伝えるオブジェクトメッセージがあるとします。基本型を変更せずにオブジェクトにプロパティを追加する方法

親愛なる開発者のために、私はresultを任意のインターフェイスから継承することはできませんあなたが私のresultタイプがオブジェクトであることを見ているので、私はそれをオブジェクトとクライアントとしておきたいと思います。私たちは、

public object DoSomething(param parameters) 
{ 
    . 
    list<MyObject> result= ... 
    return result; 
} 

は、[OK]を、クライアント側で任意のものを変更したくない今のフロントエンドに私が持っている:

public object GetResult(param parameters) 
{ 
    ... 
    return _service.DoSomething(parameteres); 
} 

用法:

{ 
     . 
     . 
     var result=GetResult(...); 
     if (**result.Status**==Success) 
     { 
      . 
      foreach(var item on result) 
      { 
       ... 
      } 
     } 
} 

あなたが例えば参照としてI私の結果やその他のプロパティに 'ステータス'のようなプロパティを持たせたい。私はプロキシのような何かを使用すると思ういくつかのアスペクトのプログラミングのテクニックは私を助けるかもしれない だから。あなたの考えは?

+0

を行うことができますどのようにお見せするためのコードです://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/using-type-dynamic) – tchelidze

+0

@tchelidzeどのように役立ちますか? – DavidG

+0

継承を使用したり、ベースタイプを変更できないのはなぜですか?私が考えることができると思う唯一の「シンプルな」方法は、オブジェクトをカスタムタイプでラップすることです。 – DavidG

答えて

-1

これを行う方法の1つは、ExpandoObjectです。あなたが拡張可能なものとして、あなたのオブジェクトを作成することができ、ここにあなたがハエ

using System.Collections.Generic; 
using System.Dynamic; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      dynamic result = GetResult(); 
      if (result.Status == "Success") 
      { 
       foreach (var item in result.list) 
       { 

       } 
      } 
     } 

     public static ExpandoObject DoSomething() 
     { 

      dynamic result = new ExpandoObject(); 
      result.list = new List<MyObject>(); 
      return result; 
     } 

     public static ExpandoObject GetResult() 
     { 
      return DoSomething(); 
     } 
    } 

    internal class MyObject 
    { 
    } 
} 

に新しいプロパティを追加することができますこの方法は、(HTTPS [ダイナミック]を使用しますが、それを

+1

"Expandable"オブジェクトのようなものはありません。しかし、「ExpandoObject」があります。また、リフレクションではプロパティを追加できません。 – DavidG

+0

@DavidG plsはこの新しいhttps://stackoverflow.com/questions/14724822/how-can-i-add-properties-to-a-class-on-runtime-in-c –

+0

を参照しています。既存のものに追加することはありません。 – DavidG

関連する問題