gpt4 book ai didi

c# - 如何在 C# 中访问属性属性中的类变量?

转载 作者:行者123 更新时间:2023-11-30 12:32:02 24 4
gpt4 key购买 nike

我为我的 properygrid 定义了一个属性,它的值是创作者的集合。我定义了 CreatorsEditor 类。在这个类中,我使用 HumanRolesCode 变量。如何在属性的属性中访问此变量以获取设置值。我想更改 HumanRolesCode 值。例如:[Editor(typeof(CreatorsEditor(HumanRolesCode = 10))]

我的代码是:

[Editor(typeof(CreatorsEditor), typeof(UITypeEditor))]
public string Creators { get; set; }
//-------------------------------------

public class CreatorsEditor : UITypeEditor
{
public static int HumanRolesCode;

public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}

public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
IWindowsFormsEditorService svc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (svc != null)
{
CreatorFrm.HumanRoleCode = HumanRolesCode;
CreatorFrm Frm = new CreatorFrm();
if (svc.ShowDialog(Frm) == System.Windows.Forms.DialogResult.OK)
{
string HumanNames = "";
for (int i = 0; i < Frm.DgvCreator.Rows.Count; i++)
if (Boolean.Parse(Frm.DgvCreator[0, i].Value.ToString()) == true)
HumanNames += Frm.DgvCreator[2, i].Value.ToString() + " , ";
if (!string.IsNullOrEmpty(HumanNames))
HumanNames = HumanNames.Substring(0, HumanNames.Length - 3);
return HumanNames;
}
}
return value;
}
}

最佳答案

属性参数必须是属性参数类型的常量表达式、typeof表达式或数组创建表达式。

好像不能给一些值赋值,一般都是让一些运行时代码(方法\属性)通过自定义属性的声明来执行。

自定义属性只是将附加信息与目标相关联的一种方式,编译器只是将附加信息添加到元数据中……虽然您想在编译时更改,但变量只存在于运行时。

此外,自定义属性的实例不会被创建,直到您使用反射来检索它(再次 - 在运行时,而声明是在编译时)。

Jeffrey Richter 的书“CLR via C#”中有一章是关于自定义属性的。我建议您阅读它以了解自定义属性的行为方式、使用它们可以做什么以及如何使用它们。

关于c# - 如何在 C# 中访问属性属性中的类变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12256851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com