2017-02-26 8 views
0

ServiceKnownType属性のソースコードを参照したいのですが、一般的なバージョンをシミュレートするものを作成しようとしています。私は実際のソースコードから始め、それを変更したいと思います。これはServiceKnownTypeAttributeの完全なソースコードですか?

私は.NETソースコードリポジトリを見て、this linkが見つかりましたが、コードは非常に疎であり、属性の実装が含まれているようには見えません。コードについては以下を参照してください。

デコンパイラを使ってみましたが、結果のコードは基本的に同じでした。私はこの属性がコードなしでどのように動作するのか理解していません!

誰かが、実際のソースがどこに公開されているかを知っていますが、もちろん公開されていることを前提としています。ここで

はかなり完全に見えること

namespace System.ServiceModel 
{ 
    [AttributeUsage(ServiceModelAttributeTargets.ServiceContract | ServiceModelAttributeTargets.OperationContract, Inherited = true, AllowMultiple = true)] 
    public sealed class ServiceKnownTypeAttribute : Attribute 
    { 
     Type declaringType; 
     string methodName; 
     Type type; 

     private ServiceKnownTypeAttribute() 
     { 
      // Disallow default constructor 
     } 

     public ServiceKnownTypeAttribute(Type type) 
     { 
      this.type = type; 
     } 

     public ServiceKnownTypeAttribute(string methodName) 
     { 
      this.methodName = methodName; 
     } 

     public ServiceKnownTypeAttribute(string methodName, Type declaringType) 
     { 
      this.methodName = methodName; 
      this.declaringType = declaringType; 
     } 

     public Type DeclaringType 
     { 
      get { return declaringType; } 
     } 

     public string MethodName 
     { 
      get { return methodName; } 
     } 

     public Type Type 
     { 
      get { return type; } 
     } 
    } 
} 

答えて

2

...そのリンクからソースコードです。ほとんどの属性と同様に、属性自体のセマンティクスとともにいくつかの値(多くは値を持たない)を関連付けているだけなので、属性が関連付けられているメンバ、型および/またはアセンブリを反映したコードは、必要に応じて属性のプロパティを読み取ることができます。

+0

おかげで、見ているしたい場合があります!だから、もしそれがすべてあるなら、私はちょっと立ち往生しています。私の元の考え方のバリエーションとして、 'ServiceKnownType'にメソッド名を渡すのと同じ属性を記述したいとします。どうすればいいでしょうか?メソッドを渡すのではなく、属性コードで特定の型を指定したいと考えています。ありがとう –

+0

@AvrohomYisroel属性はコードを含んでおらず、基本的にフラグです。これらのフラグの有無を調べ、それに応じて動作を変更することを知っている*外部のもの*は常にあります。例えば。 P/Invokeマーシャラーは、例えば、 'MarshalAs'属性では、このルックアップはそのコードにハードコードされています。したがって、もしあなたがその属性タイプを探している*外部のもの*を提供していなければ、ロジックを作成するための属性を導入することは絶対に意味がありません。 – GSerg

+0

@ジョンOK、説明のためにありがとう。私は理解しているより深くなっているように見える!だから、 'ServiceKnownType'のような属性を書こうと思ったが、特定の型の集合を返すなら、型の集合を返すメソッドを指定できるオーバーロードを使用するのと同じように、どうすればいいでしょうか?私がそれをすることができれば、私は始めることができるだろう。ありがとうございました –

0

実際、ServiceKnownTypeAttributeクラスの実際のソースコードを投稿しました。属性は単にエンティティを記述し、ロジックを含んでいません。

0

あなたはまた、私はそれより多くのコードを期待していたMono implementation

+0

リンクありがとうございます。私はそのコードを使ってみましたが、悲惨に失敗しました。私はそれを新しい属性 'MyServiceKnownType'にコピーして使用法を変更しましたが、私は属性を全く追加しなかったのと同じ' SerializationException'を得ました。どのようなアイデアが間違っていた?コードを逐語的にコピーしました。 –

関連する問題