草庐IT

ATTRIBUTES

全部标签

C#:TypeDescriptor.GetAttributes() 和 GetType().GetCustomAttributes 之间有什么区别?

使用这两个代码:instance.GetType().GetCustomAttributes(true).Where(item=>itemisValidationAttribute);和TypeDescriptor.GetAttributes(instance).OfType();如果类看起来像:[RequiredIfOtherPropertyIsNotEmpty("State","City",ErrorMessage=ErrorDescription.CreateAccount_CityRequiredWithState)][RequiredIfOtherPropertyIsNotE

c# - 这是 C# 4.0 编译器可选参数错误吗?

我正在编写自定义安全属性并出现奇怪的编译器行为...当我在同一个文件中使用该属性时,默认参数值工作正常:usingSystem.Security.Permissions;[System.Serializable]sealedclassFooAttribute:CodeAccessSecurityAttribute{publicFooAttribute(SecurityActionaction=SecurityAction.Demand):base(action){}publicoverrideSystem.Security.IPermissionCreatePermission(){r

c# - 传递具有变量值的自定义属性作为参数

我创建了一个自定义属性类,它将检查系统安全性并在出现安全错误时抛出身份验证异常。publicclassEntityChecker:System.Attribute{publicEntityChecker(intentityId){//doingsomelogictocheckiftheentityIdisallowedtobeinserted}}我想将此自定义属性用作实体添加函数的声明,并且我想将一个变量从该函数传递给属性构造函数。可以做这样的事情吗?[EntityChecker(entityId)]publicintAddNewEntity(entityId){//logicofen

c# - 属性的 MinValue 和 MaxValue 属性

是否可以制作可以限制数字的最小值或最大值的属性。例子:[MinValue(1),MaxValue(50)]publicintSize{get;set;}当我执行Size=-3;时,Size的值必须为1。我在Google中搜索并找不到关于此行为的单个示例,可能是因为无法制作?我将在属性网格中使用这些属性,因此自动验证会很方便。目前我用这样的解决方法来限制最小值:privateintsize;[DefaultValue(8)]publicintSize{get{returnsize;}set{size=Math.Max(value,1);}}所以这就像MinValue(1)

c# - 方括号之间文本的含义

我见过很多使用[]的C#程序,例如[STAThread],下面是代码。另一个经典示例是[DLLImport]。我知道STAThread是什么意思,但我的问题是方括号的意义是什么,它们主要告诉编译器什么? 最佳答案 这是一个属性。属性是一种元数据形式,您可以将其附加到各种代码元素:类、方法、程序集等。某些属性对C#编译器有特殊意义,例如[Serializable]可能会告诉编译器发出一些可以序列化类实例的代码(我说“可能”是因为我不知道C#编译器的内部工作原理)。您还可以创建自己的属性(通过继承System.Attribute)。然后

c# - 在 .NET 中使用属性的性能开销

1..属性的使用是否会带来性能开销?想想这样一个类:publicclassMyClass{intCount{get;set;}}它有10个属性(属性是类,属性类本身比MyClass本身大得多,例如:publicclassFirstAttribute:Attribute{intA,B,C,D,E,F,G,H,I,J...{get;set;}}2..每次实例化MyClass时,这些属性中的10个都会成为内存开销吗?(FirstAttribute的大小是MyClass的10倍,后者将用其中的10个进行装饰,因此与要添加的属性的总大小相比,实际对象本身是如此之小装饰在上面。)这是一个问题吗?3

c# - 当Attributes服务于此目的时,标记接口(interface)的需求是什么?

我有点迷茫ThepurposeofMarkerInterfaceVsAttributes.他们的目的在我看来是一样的(如果我错了请原谅我)。谁能解释一下它们的目的有何不同? 最佳答案 以下是两者的一些优点。标记接口(interface):使用动态类型检查更容易检查(“obj是IMarker”);允许future的功能和数据可扩展性(即将“标记”接口(interface)转变为实际声明一些成员的“完整”接口(interface));可用于泛型类型约束;另一方面,属性:提供更清晰的元数据分离;允许通过它们的构造函数或属性指定附加信息;允

c# - 如何在运行时向方法添加属性?

我们使用Microsoft.Practices.CompositeUI.EventBroker来处理应用程序中的事件订阅和发布。工作方式是向事件添加属性,指定主题名称,如下所示:[EventPublication("example",PublicationScope.Global)]publiceventEventHandlerExample;然后您向处理程序添加另一个具有相同主题名称的属性,如下所示:[EventSubscription("example",ThreadOption.Publisher)]publicvoidOnExample(objectsender,EventAr

c# - 向类的每个属性添加附加属性

假设我有一个具有任意数量任意类型属性的类publicclassTest{publicstringA{get;set;}publicobjectB{get;set;}publicintC{get;set;}publicCustomClassD{get;set;}}我希望此类中的所有对象都具有“错误”和“警告”的概念。例如,基于另一个类中的某些条件,我可能想对属性A设置警告,然后在GUI中显示该信息。GUI与我无关;而我应该如何设置此警告?我希望能够做类似的事情:对于类中的每个属性,添加一个“警告”和“错误”属性,这样我就可以做到..Testt=newTest();t.A.Warning=

c# - 以编程方式向方法或参数添加属性

我可以使用TypeDescriptor.AddAttributes在运行时向类型添加属性。我如何对方法和参数做同样的事情?(也许是2个不同的问题...) 最佳答案 TypeDescriptor.AddAttributes仅影响非常的特定用例;即来自System.ComponentModel。对于反射的其余,它对额外属性一无所知。事实上,System.ComponentModel并不真正适用于方法或参数。简而言之;你不能。您需要将此信息存储在其他地方(定制),或在编译时添加。 关于c#-以