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
,就好像我根本没有添加该属性一样。知道哪里出了问题吗?我一字不差地复制了代码。