Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将属性标记为只读,即使在winforms、.net中GetCreateInstanceSupported=true_.net_Winforms_Typeconverter_Createinstance - Fatal编程技术网

如何将属性标记为只读,即使在winforms、.net中GetCreateInstanceSupported=true

如何将属性标记为只读,即使在winforms、.net中GetCreateInstanceSupported=true,.net,winforms,typeconverter,createinstance,.net,Winforms,Typeconverter,Createinstance,使用TypeConverter类的CreateInstance方法,可以编辑不可变对象(例如字体)的属性 但是,与font类不同,我的类中有一些属性是可浏览但只读的,即使支持CreateInstance 是否有支持此功能的属性 埃塔:我已经回答了下面的问题。不过,如果有人有任何想法的话,仍然有一些改进的余地。TypeConverter.CreateInstance()不会更改字体类的属性。它只是创建了一个新的实例。这里没有魔法,它只是使用类构造函数 只要省略属性设置器,就可以了 如果您想阻止任何

使用TypeConverter类的CreateInstance方法,可以编辑不可变对象(例如字体)的属性

但是,与font类不同,我的类中有一些属性是可浏览但只读的,即使支持CreateInstance

是否有支持此功能的属性


埃塔:我已经回答了下面的问题。不过,如果有人有任何想法的话,仍然有一些改进的余地。

TypeConverter.CreateInstance()不会更改字体类的属性。它只是创建了一个新的实例。这里没有魔法,它只是使用类构造函数

只要省略属性设置器,就可以了


如果您想阻止任何人使用反射来戳出您的私有字段,则需要使用[ReflectionPermission]属性。

要使属性为只读,请继承类型转换器并重写CanConvertFrom方法。例如:

Public Class ReadOnlyStringConverter
    Inherits StringConverter

    Public Overrides Function CanConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal sourceType As System.Type) As Boolean
        Return (sourceType IsNot GetType(String)) AndAlso MyBase.CanConvertFrom(context, sourceType)
    End Function

End Class
唯一的缺点是文本不是只读的,因此人们可能希望能够对其进行编辑

如果是一次性的,可以嵌套类并将其私有化,这样就不会扰乱您的智能感知

要禁用编辑器,请添加以下属性:

<Editor(GetType(UITypeEditor), GetType(UITypeEditor))> _
_
仅添加以下内容是不够的:

<Editor()> _
_

如果你这样做了,那么现有的编辑器仍然会被选中。

嗨,我意识到fontconverter就是这样工作的,我的转换器也是这样工作的。我的类中的所有字段都是只读的。实现CreateInstance允许更改这些只读道具,然后可以创建一个新实例。然而,有一个属性“名称”我想保持易用性,但可浏览。事实上,我刚刚意识到怎么做。将类型转换器附加到我只希望就绪的字段,并进行重写,使其无法从字符串转换。