2016-11-21 3 views
0

System.Attribute에서 상속받은 클래스가 있습니다.기본 클래스 런타임에 속성이 재설정 됨 C#

이 클래스는 모든 페이지에 대해 PageAttributes를 설정하는 데 사용됩니다.

파생 클래스에서 런타임에 이러한 속성을 재설정 할 수 있습니까? 파생 클래스에서 변경하면 특성이 변경되지 않습니다.

기본 양식에서 파생 된 모든 페이지에 대해 페이지 수준 속성을 설정했습니다. 모든 페이지 레벨 메소드는 기본 폼으로 작성됩니다. Baseform 방법은 동적 조건에 따라 속성 "CompletrURL"를 변경 시도

[PageAttributeDefinition(CompleteURL = "Default.aspx")] 
public partial class Testpage: BaseForm 
{ 
} 

다음과 같이 페이지에서 (하드 코딩) 정의 된 속성을 읽을 수 있었다. 인스턴스를 만들고 속성 값을 설정할 수 있습니다. 그러나 기본 폼 클래스를 수정 된 특성을 읽을 수 없습니다.

+2

코드가 있습니까? 전에 시도한 것을 보여주고 잘못된 점을 설명하십시오. – RandomStranger

답변

1

런타임에 속성을 변경할 수 없다고 생각합니다. social.msdn에서

:

아니,이 수 없습니다. 특성은 클래스를 정의하는 DLL 또는 EXE에 저장됩니다. 따라서 속성의 값을 변경하려면 본질적으로 해당 DLL 또는 EXE를 편집해야합니다. 응용 프로그램은 일반적으로 실행되는 동안 자신의 바이너리를 변경할 수 없습니다. ...

+0

기본 폼에서 파생 된 모든 페이지에 대해 페이지 수준 특성을 설정했습니다. 모든 페이지 레벨 메소드는 기본 폼으로 작성됩니다. Baseform 메서드는 페이지에서 정의 된 (하드 코드 된) 속성을 다음과 같이 읽을 수있었습니다. [PageAttributeDefinition (CompleteURL = "Default.aspx")] public partial class Testpage : BaseForm { }. 조건에 따라 동적으로 속성 "CompletrURL"을 변경하려고했습니다. 인스턴스를 만들고 속성 값을 설정할 수 있습니다. 그러나 기본 폼 클래스를 수정 된 특성을 읽을 수 없습니다. – Jay

0

런타임에 속성을 업데이트하는 데 문제가 있는지 확인할 수 없습니다. 이게 니가 필요한거야?

void Main() 
{ 

    BaseTest test = new TestClass(); 
    var attr = (MyAttribute) test.GetType().GetCustomAttributes().First(); 
    attr.Id = 34; 

} 

[AttributeUsage(AttributeTargets.Class)] 
public class MyAttribute : Attribute 
{ 
    public int Id { get; set; } = 3;  
} 
public class BaseTest { } 

[My] 
public class TestClass : BaseTest { }