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; }
}
}
}
おかげで、見ているしたい場合があります!だから、もしそれがすべてあるなら、私はちょっと立ち往生しています。私の元の考え方のバリエーションとして、 'ServiceKnownType'にメソッド名を渡すのと同じ属性を記述したいとします。どうすればいいでしょうか?メソッドを渡すのではなく、属性コードで特定の型を指定したいと考えています。ありがとう –
@AvrohomYisroel属性はコードを含んでおらず、基本的にフラグです。これらのフラグの有無を調べ、それに応じて動作を変更することを知っている*外部のもの*は常にあります。例えば。 P/Invokeマーシャラーは、例えば、 'MarshalAs'属性では、このルックアップはそのコードにハードコードされています。したがって、もしあなたがその属性タイプを探している*外部のもの*を提供していなければ、ロジックを作成するための属性を導入することは絶対に意味がありません。 – GSerg
@ジョンOK、説明のためにありがとう。私は理解しているより深くなっているように見える!だから、 'ServiceKnownType'のような属性を書こうと思ったが、特定の型の集合を返すなら、型の集合を返すメソッドを指定できるオーバーロードを使用するのと同じように、どうすればいいでしょうか?私がそれをすることができれば、私は始めることができるだろう。ありがとうございました –