是否有大杂乱属性的替代品?

Buh*_*ica 19 c# attributes

我经常发现属性可能太大了.有时感觉属性占用了屏幕而不是代码.它可能使得很难发现方法名称.

此外,它们不可重复使用,因此您最终可能会重复使用您的值.

为了解决这个问题,我考虑创建自己的属性类,该类继承自required属性,并将所有属性设置为我需要的默认值.
但是,在大多数情况下,属性是密封的,从而阻止了我的计划.

有没有大型属性的替代品?


作为我正在谈论的一个随机的例子:

[SoapDocumentMethod(
    "http://services.acme.co.uk/account/Web/GetCustomerDetails/GetCustomerDetails", 
    RequestNamespace = "http://services.acme.co.uk/account/Web", 
    ResponseNamespace = "http://services.acme.co.uk/account/Web", 
    Use = SoapBindingUse.Literal, 
    ParameterStyle = SoapParameterStyle.Wrapped)]
public Response GetCustomerDetails(Request request)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

C. *_*oss 8

虽然它不能解决您的所有问题,但您应该使用常量来表示重复值,尤其是字符串.

[SoapDocumentMethod(
    URL, RequestNamespace = NAMESPACE, ResponseNamespace = NAMESPACE, 
    Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public Response GetCustomerDetails(Request request)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*zer 4

从我的角度来看,有很多选择。

其中之一是代码生成。您可以使用 T4 引擎来读取某些配置文件并将某些属性应用于任意成员。

有关 T4 的更多信息,请访问 http://msdn.microsoft.com/en-us/library/ff697195.aspx

有时,某些类是某些层次结构的一部分,您可以在抽象或虚拟成员中使用某些属性,因此重写这些属性的派生类不需要该属性,因为它已在基成员中声明。

关于可读性,您可以使用区域来隐藏成员的属性。

无论如何,我会建议您使用代码生成方法,因为它是最干净、最简单的解决方案。是的,这不是一个替代方案,因为您将拥有确切的代码,但您将避免手动完成。

最后,大多数 .NET API 和第三方 API 允许您使用属性或某些对象模型来配置事物,因此,也许,当您发现代码充满属性时,可以通过创建您的自己的配置模式并使用库的对象模型来配置您的环境。

编辑

我想补充一点,如果您喜欢代码生成方法,您可以使用自定义属性,当在某些文件上执行某些代码模板时,这些属性将被正确的属性替换。

其中的一个示例可能是:

[SomeFake]
public void A() {}

... and after code generation

[SomeActual(Allow = true, Loggable = true)]
public void A() {}
Run Code Online (Sandbox Code Playgroud)