저는 첫 번째 부분을 따르거나 색이나 속성과 어떤 관련이 있습니까?하지만 Attributes
이 작동하지 않는 것은 아닙니다. 속성 래퍼가 아니며 Properties
, Methods
및 Types
은 Attributes
과 관련이 없습니다 (및 , 그 반대로). 그것들은 어셈블리에 컴파일 된 메타 데이터입니다. 따라서 의미있는 방식으로 값을 변경할 수 없습니다.
테스트 클래스 및 테스트 속성 :
Dim f As New Foo
' get props for the Type
Dim pi As PropertyInfo = f.GetType.GetProperty("Name")
Dim attr = pi.GetCustomAttributes(GetType(BarState), False)
If attr.Length > 0 Then
' get prop info for the State property on the Attr Type
Dim pa As PropertyInfo = attr(0).GetType.GetProperty("State")
' change it
CType(attr(0), BarState).State = "GREEN"
' or
'pa.SetValue(attr(0), "GREEN", Nothing)
' print it (prints "GREEN" but it does not persist)
Console.WriteLine(CType(attr(0), BarState).State)
End If
'get the attr again as you might do next time thru
attr = pi.GetCustomAttributes(GetType(BarState), False)
' print the value (Print "red")
Console.WriteLine(CType(attr(0), BarState).State)
첫 번째 인쇄는 "GREEN"입니다하지만만을위한 것입니다 : State
이후
Public Class BarState
Inherits Attribute
Public Property State As String
Public Sub New(t As String)
State = t
End Sub
End Class
Public Class Foo
<BarState("red")>
Public Property Name As String
End Class
는 속성입니다 테스트 우리가 설정할 수있는 경우 이 인스턴스는 지속되지 않습니다. 다음 번에 가져 오면 "빨간색"으로 되돌아갑니다. 속성 이 유형이이기 때문에 Reflection을 시도하여 pa.SetValue(attr(0), "GREEN", Nothing)
을 사용하여 값을 변경하고 주석 처리 할 수 있습니다. "빨간색"이 어셈블리에 컴파일되어 시작점이 항상 존재하기 때문에 계속 유지되지 않습니다.
모든 유형의 모든 속성에 대한 사전 또는 속성 인스턴스 모음을 유지하는 것처럼 보일 수 있습니다. 그것들은 모두 똑같이 작동 할 수 있습니다. 따라서 어떤 것도 Attribute
인스턴스가 어떤 Property
에있는지를 추적하기 위해 해시를 만들어야합니다. Type
.
그리고 그 컬렉션을 기본 인스턴스 개체와 동기화 상태로 유지해야합니다. Attribute 인스턴스는 그 인스턴스가 사라 졌음을 알지 못하므로 상태 설정이 되돌려 져야하므로 Attribute Manager가이를 처리해야합니다.
당신은 (값의 범위 등) 일에 태그를 다음 태그 속성에 대한 범위 검사에서 직조하는 어셈블리를 다시 작성하는 속성 사용 "직공"로 보일 수 있습니다
. 그들이 당신이 묘사하는 것의 라인을 따라 무엇을 할 지 알지 못한다면 당신이 무엇인지와 같은 소리가 나옵니다.
지금까지 시도한 것을 보여줄 수 있습니까? – waka
속성의 속성은 읽기 전용입니다. 런타임에 변경할 수 있더라도 INotifyPropertyChanged 인터페이스를 지원하지 않으므로 바인딩을 통해 이러한 특성에 바인딩 된 값이 새로 고쳐지지 않습니다. – Steve
@Steve : 이것은 WinForms이므로 INotifyPropertyChanged 인터페이스가 없습니다. - 최소한 네이티브 적으로. –