0

TypeConverter クラスの CreateInstance メソッドを使用すると、フォントなどの不変オブジェクトのプロパティを編集できます。

ただし、フォント クラスとは異なり、私のクラスには、CreateInstance がサポートされていても、参照可能で読み取り専用にしたいプロパティがいくつかあります。

これをサポートする属性はありますか?

ETA: 以下の質問に回答しました。ただし、誰かにアイデアがあれば、まだわずかな改善の余地があります。

4

2 に答える 2

1

TypeConverter.CreateInstance() は、たとえば Font クラスのプロパティを変更しません。その新しいインスタンスを作成するだけです。ここに魔法はありません。クラス コンストラクターを使用するだけです。

プロパティ セッターを省略するだけで問題ありません。

だれかが Reflection を使用してプライベート フィールドを突くのを防ぎたい場合は、[ReflectionPermission] 属性を使用する必要があります。

于 2010-01-17T19:11:24.200 に答える
0

プロパティを読み取り専用にするには、型コンバーターを継承し、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

唯一の欠点は、テキストが読み取り専用に見えないことです。そのため、編集できることを期待するかもしれません。

1回限りの場合は、クラスをネストしてプライベートにして、インテリセンスが乱雑にならないようにしても問題ありません。

エディターを無効にするには、次の属性を追加します。

<Editor(GetType(UITypeEditor), GetType(UITypeEditor))> _

以下を追加するだけでは十分ではありません:

<Editor()> _

その場合、既存のエディターが引き続き選択されます。

于 2010-01-18T00:48:24.783 に答える