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

简单来说,和你穿衣服的原因差不多。并非所有内容都应始终向公众公开。选定的东西需要公开,以便其他人可以与它们交互,但其他东西是私有的,应该保留在该类的内部。

虽然,我可能不应该在最后一句中使用内部这个词,因为还有第三种选择:internal访问修饰符。VB.NET ( Friend) 中使用的名称可能更清楚。这表明一条数据应该对单个程序集中的所有其他类可见,但对外部隐藏。类似的类比适用:有些事情您可能会与最亲密的朋友分享,但仍不想公开。

还有其他更复杂的原因,例如启用信息隐藏、最大化特定类与应用程序其余部分之间的分离、以及即使实现细节在版本之间可能已更改,也要保持一致的公共接口,所有这些都有助于良好的面向对象设计。如果您真的想了解细节,我建议您选择一本关于面向对象编程的好书。如果没有扎实的基础知识,要掌握像 C# 这样的面向对象语言是非常困难的,如果不是不可能的话。

默认情况下,事物是不公开的,因为它们可能包含敏感信息,或者至少是您不想作为类的公共接口的一部分公开的信息。将某件事公开是一个更大的决定,比简单地将其公开的风险更大,因此您被迫明确地做出该决定。

于 2011-03-06T13:19:32.837 回答
6

使用类的目的是能够将您的代码分成逻辑相关的部分。这使您的代码更易于理解和维护。

例如,如果您需要修改类中的代码,您可以更多地关注类的功能,而不是项目的其他部分。但是,您的类的公共成员在一定程度上限制了这种分离,因为如果您修改公共成员,可能会影响项目的其他部分。

尽可能多地保持你的类私有(同时仍然可以从你的应用程序中使用)最大化它与你的应用程序的其余部分之间的分离。它使只考虑您正在处理的类中的逻辑变得更容易,并且它允许您修改这些私有成员,而不必考虑应用程序的其他部分可能会受到影响。

于 2011-03-06T13:09:23.853 回答
3

我建议您阅读更多有关面向对象编程中的抽象的内容。也许关于抽象的维基百科文章是一个很好的起点。

编辑:康拉德是绝对正确的,抽象不会自动暗示“隐藏”信息。可以说是面向对象编程中封装的作用。

我想我想说的是,这个问题并不特定于 C#,而是需要阅读一些关于一般面向对象编程原则的内容。

于 2011-03-06T12:48:37.980 回答
0

默认访问修饰符internal意味着它在同一个程序集中是公共的,在程序集之外是私有的。

如果您想公开某些数据,例如某个标签的文本,最好的做法是创建公共只读属性,如下所示:

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

要访问它,您必须使用以下代码:

string text = classInstance.LabelText;

这样标签本身是不公开的,但它的文本可以被所有人阅读。

于 2011-03-06T13:21:06.123 回答