x:ClassModifier ディレクティブ

x:Class も指定されているときの XAML のコンパイル動作を変更します。 具体的には、Public アクセス レベル (既定値) を持つ部分的な class を作成するのではなく、指定した x:ClassNotPublic アクセス レベルで作成されます。 この動作は、生成されたアセンブリ内のクラスのアクセス レベルに影響します。

XAML 属性の使用方法

<object x:Class="namespace.classname" x:ClassModifier="NotPublic">
   ...
</object>

XAML 値

説明
NotPublic TypeAttributes.PublicTypeAttributes.NotPublic を指定するために渡す文字列は一定ではなく、使用される分離コード プログラミング言語に依存します。 「解説」を参照してください。

依存関係

x:Class は、同じ要素にも指定する必要があり、その要素はページのルート要素である必要があります。 詳細については、[MS-XAML] セクション 6.3.1.8を参照してください。

Remarks

.NET XAML サービスでの x:ClassModifier の値の使用方法は、プログラミング言語によって異なります。 使用する文字列は、各言語で CodeDomProvider を実装する方法、TypeAttributes.PublicTypeAttributes.NotPublic の意味を定義するために返される型コンバーター、および言語で大文字と小文字が区別されるかによって異なります。

  • C# の場合、TypeAttributes.NotPublic を指定するために渡す文字列は internal です。

  • Microsoft Visual Basic .NET の場合、TypeAttributes.NotPublic を指定するために渡す文字列は Friend です。

  • C++/CLI では、XAML のコンパイルをサポートするターゲットは存在しません。したがって、渡す値は指定されていません。

TypeAttributes.Public を指定することもできます (C# では public、Visual Basic では Public)。ただし、TypeAttributes.Public は既に既定の動作であるため、TypeAttributes.Public を指定することはほとんどありません。

同等のユーザー コードのアクセスレベルの制限がある他の値 (C# の private など) は、XAML では入れ子になったクラス参照がサポートされていないため、x:ClassModifier には関係しません。したがって、TypeAttributes.NotPublic 修飾子に同じ効果があります。

セキュリティに関するメモ

x:ClassModifier で宣言されるアクセス レベルは、引き続き特定のフレームワークとその機能による解釈の対象になります。 WPF には、x:ClassModifierinternal である型を読み込んでインスタンス化する機能が含まれています。これは、そのクラスがパック URI 参照を通して WPF リソースから参照される場合が対象です。 このような場合と、他のフレームワークによって実装される可能性がある同様の場合の結果として、x:ClassModifier のみに依存して、起こり得るすべてのインスタンス化の試みをブロックしないでください。

関連項目