1

これはばかげているように聞こえるかもしれませんが、本当に知りたいです:)現在c#を学んでいます。

ご存知のように、「オブジェクト」(ボタン、ラベル、テキスト、変数など)をパブリックまたは好きなものに設定する必要があります。

ただし、次のようなコードを記述する必要があります。

// my point is you cant just type label1.text you need to type class.label1.text
// so there is no chance of getting bugged
//because there is label1 in each of forms/classes
 class Classlol = new class();
 classlol.label1.blabla

では、他の形式で到達できないようにするポイントは何ですか? なぜすべてが公開されていないか、デフォルトで公開されていないのですか?

ありがとう。

4

4 に答える 4

7

簡単に言えば、服を着る理由とほとんど同じです。常にすべてを一般に公開する必要はありません。選択されたものは、他の人がそれらと対話できるように公開する必要がありますが、他のものは非公開であり、そのクラスの内部に保持する必要があります。

ただし、最後の文で内部という言葉を使用するべきではなかったと思います。なぜなら、3 番目のオプションであるinternalアクセス修飾子があるからです。VB.NET ( Friend) で使用されている名前の方がわかりやすいでしょう。これは、データの一部が 1 つのアセンブリ内の他のすべてのクラスから見えるが、外部からは隠されている必要があることを示しています。同様の類推が当てはまります。親しい友人と共有するかもしれないが、それでも公開したくないものがあります。

情報隠蔽を有効にする、特定のクラスとアプリケーションの残りの部分との間の分離を最大化する、実装の詳細がバージョン間で変更された可能性がある場合でも一貫したパブリック インターフェイスを維持するなど、他のより複雑な理由があります。優れたオブジェクト指向設計に。本当に核心を理解したいのであれば、オブジェクト指向プログラミングに関する優れた本を手に取ることをお勧めします。C# のようなオブジェクト指向言語を習得することは、基礎をしっかりと理解していなければ、不可能ではないにしても非常に困難です。

機密情報、または少なくともクラスの公開インターフェイスの一部として公開したくない情報が含まれている可能性があるため、デフォルトでは公開されていません。何かを公開することは、単に非公開にするよりも大きなリスクを伴う大きな決定であるため、その決定を明示的に行う必要があります。

于 2011-03-06T13:19:32.837 に答える
6

クラスを使用するポイントは、コードを論理的に関連する部分に分離できるようにすることです。これにより、コードの理解と保守が容易になります。

たとえば、クラス内のコードを変更する必要がある場合、プロジェクトの他の部分ではなく、クラスが機能する方法に重点を置くことができます。ただし、パブリック メンバーを変更すると、プロジェクトの他の部分に影響を与える可能性があるため、クラスのパブリック メンバーはこの分離をいくらか制限します。

クラスをできる限りプライベートに保つことで (アプリケーションから引き続き使用できるようにしながら)、クラスとアプリケーションの残りの部分との分離を最大化します。作業中のクラスのロジックだけを考えるのが簡単になり、アプリケーションの他の部分が影響を受ける可能性があることを考えることなく、それらのプライベート メンバーを変更できます。

于 2011-03-06T13:09:23.853 に答える
3

オブジェクト指向プログラミングにおける抽象化についてもっと読むことをお勧めします。おそらく、ウィキペディアの抽象化に関する記事から始めるのがよいでしょう。

編集: Konrad は完全に正しいです。抽象化は自動的に情報を「隠す」ことを意味するわけではありません。オブジェクト指向プログラミングにおけるカプセル化の役割と言えます。

私が言いたかったのは、この質問は C# に固有のものではなく、一般的なオブジェクト指向プログラミングの原則について少し読んでほしいということです。

于 2011-03-06T12:48:37.980 に答える
0

デフォルトのアクセス修飾子は ですinternal。これは、同じアセンブリ内ではパブリックであり、アセンブリ外ではプライベートであることを意味します。

ラベルのテキストなど、特定のデータをパブリックとして公開する場合、ベスト プラクティスは次のように public readonly プロパティを作成することです。

public string LabelText
{
   get { return MyLabel.Text; }
}

アクセスするには、次のようなコードを使用する必要があります。

string text = classInstance.LabelText;

この方法では、ラベル自体は公開されませんが、そのテキストは誰でも読むことができます。

于 2011-03-06T13:21:06.123 に答える