基类属性在运行时重置C#

时间:2016-11-21 06:34:56

标签: c# .net class attributes base

我有一个继承自System.Attribute的类。

此类用于为任何页面设置PageAttributes。

是否可以在运行时从派生类重置这些属性? 从派生类更改它不会更改属性。

我为从基本表单派生的所有页面设置了页面级别属性。所有页面级方法都是用baseform编写的。 Baseform方法能够读取页面中定义的属性(硬编码),如下所示

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

尝试根据条件动态更改属性“CompletrURL”。我能够创建实例并将值设置为属性。但是baseform类我无法读取修改后的属性。

2 个答案:

答案 0 :(得分:1)

我不认为可以在运行时更改属性。

来自social.msdn

  

不,这是不可能的。请记住,属性存储在定义类的DLL或EXE中。因此,要更改属性的值,您实际上是要求编辑该DLL或EXE。应用程序通常无法在运行时更改自己的二进制文件。   ...

答案 1 :(得分: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 { }