【问题标题】:Base class Attributes reset at run time C#基类属性在运行时重置 C#
【发布时间】:2016-11-21 06:34:56
【问题描述】:

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

这个类被用来设置任何页面的PageAttributes。

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

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

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

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

【问题讨论】:

  • 你有一些代码吗?请向我们展示您之前尝试过的方法并解释出现了什么问题。

标签: c# .net class attributes base


【解决方案1】:

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

来自social.msdn

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

【讨论】:

  • 我为从基本表单派生的所有页面设置了页面级别属性。所有页面级别的方法都是用 baseform 编写的。 Baseform 方法能够读取页面中定义(硬编码)的属性,如下所示 [PageAttributeDefinition( CompleteURL = "Default.aspx")] public partial class Testpage: BaseForm { }。尝试根据条件动态更改属性“CompletrURL”。我能够创建实例并将值设置为属性。但是我无法读取修改后的属性。
【解决方案2】:

无法发现在运行时更新属性的任何问题。这是你需要的吗?

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 { }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2013-01-21
    • 2019-02-15
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多