두 번 허용 속성을 만드는 방법
특성을 사용하고 있습니다. 다음과 같이 사용하고 있습니다.
[MyCustomAttribute("CONTROL")]
[MyCustomAttribute("ALT")]
[MyCustomAttribute("SHIFT")]
[MyCustomAttribute("D")]
public void setColor()
{
}
그러나 "Duplicate 'MyCustomAttribute'attribute"오류가 표시됩니다.
허용 속성을 지불해야합니까?
AttributeUsage
당신이 막대기 의 속성 (입의 네) 클래스와 세트에 속성 AllowMultiple
을 true
:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public sealed class MyCustomAttribute: Attribute
AttributeUsageAttribute ;-p
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class MyAttribute : Attribute
{}
그러나 ComponentModel ( TypeDescriptor
)을 사용하는 경우 멤버 당 하나의 속성 인스턴스 (속성 유형 당) 만 지원합니다. 원시 반사는 모든 숫자를 지원합니다 ...
Anton의 솔루션 은 맞지만 또 다른 문제가 있습니다.
간단히 말해, 사용자 지정 속성이 TypeId를 재정의하지 않는 한 PropertyDescriptor.GetCustomAttributes ()를 통해 액세스하면 속성의 단일 인스턴스 만 반환됩니다.
기본적으로 Attribute
s는 단일 필드 / 속성 부여 한 번만 적용 제한됩니다. MSDN 의 Attribute
클래스 정의 에서 볼 수 있습니다 .
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
따라서 다른 사람들이해야하는 모든 하위 클래스는 동일한 방식으로 제한하고, 그리고 모든 하위 클래스는 여러 인스턴스가 필요한 경우 명시 적으로 다음으로 설정 AllowMultiple
합니다 true
.
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
사용을 허용 여러 하는 TypeId
속성 에서는 속성 이 예상 대로 작동 하도록 속성 을 재정의해야 우리합니다 . 이를 수행하는 가장 쉬운 방법은 속성 인스턴스 자체를 반환하는 속성을 구현하는 것입니다.PropertyDescriptor.Attributes
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(이 답변을 게시하는 것은 다른 사람이 틀 렸습니다.)
대안으로 시퀀스를 허용하도록 속성을 재 설계하는 것을 고려하십시오.
[MyCustomAttribute(Sequence="CONTROL,ALT,SHIFT,D")]
또는
[MyCustomAttribute("CONTROL-ALT-SHIFT-D")]
그런 다음 값을 구문 분석하여 속성을 구성하십시오.
이에 대한 예는 www.codeplex.com/aspnet 에서 ASP.NET MVC 소스 코드의 AuthorizeAttribute를 확인하십시오 .
AttributeUsage를 추가 한 후 속성을 속성 클래스에 추가해야합니다.
public override object TypeId
{
get
{
return this;
}
}
참고 URL : https://stackoverflow.com/questions/553540/how-to-create-duplicate-allowed-attributes
'IT' 카테고리의 다른 글
Chrome의 개발자 도구에는없는 Firebug의 기능은 무엇입니까? (0) | 2020.09.11 |
---|---|
C # 네임 스페이스-요점은 무엇입니까? (0) | 2020.09.11 |
Ajax를 사용하여 PDF 파일 다운로드 및 열기 (0) | 2020.09.11 |
Java 주석에서 코드의 위치 섹션을 표시하는 방법은 무엇입니까? (0) | 2020.09.11 |
바이트 배열에서 이미지로 변환 (0) | 2020.09.11 |