C# 这是ServiceKnownTypeAttribute的完整源代码吗?
我想看看C# 这是ServiceKnownTypeAttribute的完整源代码吗?,c#,.net,custom-attributes,C#,.net,Custom Attributes,我想看看ServiceKnownType属性的源代码,因为我想尝试编写一些模拟它的通用版本的东西。我想从实际的源代码开始,并对其进行修改 我查看了.NET源代码存储库,发现其中的代码非常稀少,而且看起来不包括属性的实现。请参见下面的代码 我尝试使用反编译器,但结果代码看起来基本相同。我不明白这个属性在没有任何代码的情况下是如何工作的 任何人都知道我在哪里可以找到真正的来源,当然假设它已经出版了 以下是该链接的源代码 namespace System.ServiceModel { [Att
ServiceKnownType
属性的源代码,因为我想尝试编写一些模拟它的通用版本的东西。我想从实际的源代码开始,并对其进行修改
我查看了.NET源代码存储库,发现其中的代码非常稀少,而且看起来不包括属性的实现。请参见下面的代码
我尝试使用反编译器,但结果代码看起来基本相同。我不明白这个属性在没有任何代码的情况下是如何工作的
任何人都知道我在哪里可以找到真正的来源,当然假设它已经出版了
以下是该链接的源代码
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; }
}
}
}
看起来很完整。与大多数属性一样,它只是将一些值(许多没有值)与属性本身的语义相关联,因此反映属性所附加到的成员、类型和/或程序集的代码可以检测它们所关心的属性的存在,并根据需要读取属性的任何属性 看起来很完整。与大多数属性一样,它只是将一些值(许多没有值)与属性本身的语义相关联,因此反映属性所附加到的成员、类型和/或程序集的代码可以检测它们所关心的属性的存在,并根据需要读取属性的任何属性 事实上,您发布了ServiceKnownTypeAttribute类的真实源代码。属性只描述实体,不包含任何逻辑 事实上,您发布了ServiceKnownTypeAttribute类的真实源代码。属性只描述实体,不包含任何逻辑 您可能还想看一看您可能还想看一看谢谢,我期待更多的代码!所以,如果这就是全部,那么我有点卡住了。作为我最初想法的一个变体,假设我想编写一个属性,该属性相当于将方法名传递给
ServiceKnownType
——我该如何做?我希望在属性代码中指定特定类型,而不是传递方法。Thanks@AvrohomYisroel属性不包含代码,它们基本上是标志。总是有一些外部事物知道寻找这些标志的存在/不存在,并相应地改变其行为。例如,P/Invoke marshaller知道查找属性,例如Marshallas
属性,该查找在其代码中是硬编码的。因此,如果您也没有提供将要查找该属性类型的外部内容,那么引入属性来创建逻辑是没有意义的。@Jon好的,谢谢您的解释。看来我比我理解的更深了!因此,如果我想编写一个属性,比如ServiceKnownType
,但它返回一组特定类型,就像使用重载来指定一个返回类型集合的方法一样,我该怎么做?如果我能做到这一点,我就可以开始了。再次感谢您。您打算如何使用该属性?恐怕您需要更改读取该属性的代码,而不是该属性。谢谢,我期待更多的代码!所以,如果这就是全部,那么我有点卡住了。作为我最初想法的一个变体,假设我想编写一个属性,该属性相当于将方法名传递给ServiceKnownType
——我该如何做?我希望在属性代码中指定特定类型,而不是传递方法。Thanks@AvrohomYisroel属性不包含代码,它们基本上是标志。总是有一些外部事物知道寻找这些标志的存在/不存在,并相应地改变其行为。例如,P/Invoke marshaller知道查找属性,例如Marshallas
属性,该查找在其代码中是硬编码的。因此,如果您也没有提供将要查找该属性类型的外部内容,那么引入属性来创建逻辑是没有意义的。@Jon好的,谢谢您的解释。看来我比我理解的更深了!因此,如果我想编写一个属性,比如ServiceKnownType
,但它返回一组特定类型,就像使用重载来指定一个返回类型集合的方法一样,我该怎么做?如果我能做到这一点,我就可以开始了。再次感谢您。您打算如何使用该属性?恐怕您需要更改读取该属性的代码,而不是属性。感谢您提供的链接。我试着使用那个代码,但失败得很惨。我将它复制到一个新属性MyServiceKnownType
中并更改了用法,但得到了相同的SerializationException
,就好像我根本没有添加该属性一样。知道哪里出了问题吗?我一字不差地复制了代码。谢谢你的链接。我试着使用那个代码,但失败得很惨。我将它复制到一个新属性MyServiceKnownType
中并更改了用法,但得到了相同的SerializationException
,就好像我根本没有添加该属性一样。知道哪里出了问题吗?我一字不差地复制了代码。