这个 C# 语法是什么意思?

6
我可能理解有误,但我看到一个类似于下面这样的WebMethod:

我不确定是否正确,但是在一个WebMethod之上我看到了像这样的东西:

[return:(XmlElement("Class2"),IsNullable = false)]
public Class2 MEthod1()
{

}

我最初看到的是VB版本,然后使用转换器将其转换为C#。我以前从未见过它。它在VB 6 ASMX文件中。


本来想发布一个回答,分解所有不同的部分,但我猜你是在谈论"return:"?如果是这样,请查看提供的答案。 - Kyle W
@Hans 你在说什么? [WebMethod] [return:XmlElement("GetChanged")] public string Get() { return ""; } 实际上,带有返回属性的序列化方式与不带的不同。 - Kyle W
2个回答

16

这是一个属性目标,在你的例子中被用来消除对返回值与其他元素的使用的歧义:

// default: applies to method
[SomeAttr]
int Method1() { return 0; } 

// applies to method
[method: SomeAttr]
int Method2() { return 0; } 

// applies to return value
[return: SomeAttr]
int Method3() { return 0; } 

创建属性时,您可以指定属性可应用于哪些语言元素。下面的示例说明了这一点。

有关可用目标的列表,请参见此处:
http://msdn.microsoft.com/en-us/library/system.attributetargets.aspx

namespace AttTargsCS 
{
    // This attribute is only valid on a class.
    [AttributeUsage(AttributeTargets.Class)]
    public class ClassTargetAttribute : Attribute {
    }

    // This attribute is only valid on a method.
    [AttributeUsage(AttributeTargets.Method)]
    public class MethodTargetAttribute : Attribute {
    }

    // This attribute is only valid on a constructor.
    [AttributeUsage(AttributeTargets.Constructor)]
    public class ConstructorTargetAttribute : Attribute {
    }

    // This attribute is only valid on a field.
    [AttributeUsage(AttributeTargets.Field)]
    public class FieldTargetAttribute : Attribute {
    }

    // This attribute is valid on a class or a method.
    [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)]
    public class ClassMethodTargetAttribute : Attribute {
    }

    // This attribute is valid on any target.
    [AttributeUsage(AttributeTargets.All)]
    public class AllTargetsAttribute : Attribute {
    }

    [ClassTarget]
    [ClassMethodTarget]
    [AllTargets]
    public class TestClassAttribute {
        [ConstructorTarget]
        [AllTargets]
        TestClassAttribute() {
        }

        [MethodTarget]
        [ClassMethodTarget]
        [AllTargets]
        public void Method1() {
        }

        [FieldTarget]
        [AllTargets]
        public int myInt;

        static void Main(string[] args) {
        }
    }
}

詹姆斯,你能再详细解释一下吗?我仍然有点困惑。在我的问题中,Class2是从xsd文件自动生成的类。 - Xaisoft
@Xaisoft:属性目标定义了属性的用途。有些属性可以用于任何元素(类、方法、返回值等),而其他属性只能用于特定的元素。在您发布的示例代码中,该属性可以用于多个元素,因此分配一个目标可以将其用法从另一个元素中区分出来。 - James Johnson

5

这是一个修改方法返回值序列化为XML的属性。

一般来说,[return: Attribute]语法用于指示该属性适用于方法的返回值。


约翰,你能详细说明一下吗? - Xaisoft
我不知道你在要求什么。你提供了一个例子。 - John Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接