2009-07-23 13 views
0

私はVSTS 2008 + C#+ .Net 2.0を使用してWindowsフォームアプリケーションを開発しています。私がデフォルトで見つけたのは、私たちが作成した新しいフォームがpublic partialとしてマークされるということです。Windowsフォームクラスの部分公開の問題

私の懸念は、公開クラスとして公開するクラスにセキュリティ上のリスクがあるかどうかです。私たちはそれを非公開とするべきでしょうか?機能をプライベートとしてマークした場合の影響?

ところで、私はパブリックとして部分的にプライベートとしてクラスをマークするときコンパイルエラーで会った。コンパイルのエラーメッセージは何ですか?何が間違っていますか?

Error 1 Elements defined in a namespace cannot be explicitly 
declared as private, protected, or protected internal C:\FooTest\Form1.Designer.cs 

答えて

1

エラーメッセージが言うように、それはまさに - 名前空間スコープで宣言されたクラス(および他のタイプは)privateすることはできませんprivateは、「誰が、クラスを囲むことは、これを見ることができます」を意味し、そして何囲むクラスはでありませんので、名前空間の範囲。

クラスをアセンブリ外から見たくない場合は、internalを使用してください。

+0

これを内部としてマークすると、Windows Formsアプリケーションに機能上の影響はありますか?たとえば、.Netランタイムが他のアセンブリからクラスを操作するためにリフレクションを使用するかどうかは不明です(内部アセンブリとしてマークすると、.Netアセンブリを含む他のアセンブリからのアクセスは許可されません)。 – George2

+1

.NETランタイムは、他のアセンブリからフォームクラスを操作する必要があるのはなぜですか?クラスの_インスタンスの_members_を操作する必要があるかもしれませんが(データバインディングを使用する場合など)、クラス 'internal'を作成することによって影響を受けません。だからうまくいくでしょう。 –

+0

こんにちはパベル、私は内部クラスとしてクラスを作ると私の混乱は、他のすべてのアセンブリからのアクセスが拒否されている - 私はクラスのメンバーへのすべてのアクセスが拒否されていることも意味すると思います。正しい? – George2

2

プライベートと定義すると、そのクラスを持つ目的は何ですか?そのファイルの外の誰もそれにアクセスすることはできません。あなたのメインプログラム(おそらくProgram.csで動作している)さえも。

部分的には、クラスが分割されているため、FormクラスにはForm.csファイルのコンポーネントよりも多くのコンポーネントが含まれています。 VSは自動的に生成されたコードを1つのファイルに入れ、コードを別のファイルに入れます。したがって、生成されたコードをすべて1つのファイルに移動しない限り、部分的な部分を削除することはできませんが、そうしてフォームデザイナーを使ってラベルフォントを変更すると、あなたは破滅します!

+1

C#、periodで非ネストされたクラスを 'private'として定義することはできません。 –

+0

FreddyとPavelに感謝します。Formsアプリケーションの機能を以前と同じようにしたいと考えています。追加情報を外部に公開しないでください。Formsクラスをパブリックにすると、公開したくない情報が公開される可能性があります。私のアドバイスは? – George2

+1

次に、機密情報の「内部」機能を持たないでください。すべての機密情報を含むクラスを作成することができます。このクラスはメインのプライベートメンバー(私はそれが良いアイデアとは思えません)か、フォームに情報を渡す責任を負う第3のクラスを持つことができます。これはModel View Controllerパターンのようなものになります。ここでは、データはModel、ControllerはModelからFormへのデータの受け渡しを行います(Viewになります)。 – Freddy

関連する問題