我不明白为啥一个类是“公共的”[重复]
Posted
技术标签:
【中文标题】我不明白为啥一个类是“公共的”[重复]【英文标题】:I don't understand why a class is "public" [duplicate]我不明白为什么一个类是“公共的”[重复] 【发布时间】:2015-07-15 22:03:20 【问题描述】:我开始学习 C#,我来自 C++ 背景。我应该通过these 指令创建的示例页面看起来像
using System.Web;
using System.Web.Mvc;
namespace MvcMovie.Controllers
public class HelloWorldController : Controller
//
// GET: /HelloWorld/
public string Index()
return "This is my <b>default</b> action...";
//
// GET: /HelloWorld/Welcome/
public string Welcome()
return "This is the Welcome action method...";
我的主要问题是为什么HelloWorldController
类以public
为前缀。我知道HelloWorldController
是从Controller
派生的,但是为什么一个类首先需要是public
?我对public
和private
这两个词的理解是,只有当它们是类中的函数时它们才有意义,而public
是该类的实例可以使用的。另外,我创建的这个 Visual Studio ASP.NET MVC 项目中的 main.cs
在哪里?
【问题讨论】:
这个答案可以说是最好的Learning c# 101书籍或在线教程,而不是SO的问题? C# 对于public
的含义与在此上下文中的 C++ 完全相同。在 C++ 或 C# 中,“公共和私有只有当它们是类中的函数时才有意义”是什么意思非常不清楚
msdn 很棒:msdn.microsoft.com/en-us/library/x9afc042.aspx
我同意@MickyDuncan。但为了帮助您:ASP.NET MVC 应用程序没有(或不需要)main.cs。框架会负责处理事物何时被调用,因此与普通应用程序不同。
@AlexeiLevenkov: public
类的限定符在 C++ 中没有意义,所以我不明白你所说的 same meaning
是什么意思。我相信不同之处在于编译方法。 C++ 当然有头文件。
【参考方案1】:
类上的public和private的目的与方法上的不同。
Classes (C# Programming Guide)
public class Customer
//Fields, properties, methods and events go here...
class 关键字前面是访问级别。因为公众是 在这种情况下,任何人都可以从此类创建对象。
Access Modifiers (C# Programming Guide)
public class Bicycle
public void Pedal()
该类型或成员可以被同一代码中的任何其他代码访问 程序集或引用它的其他程序集。
【讨论】:
我相信命名空间可以发挥作用?即,如果我要从另一个命名空间调用Customer
类,则需要该类是公共的。
@Ben 命名空间在可访问性方面没有任何作用。它们仅用于逻辑组织。另一方面,组件确实发挥了作用。由于程序集通常包含一个命名空间,因此很容易混淆。
我意识到这些是来自 MSDN 的引用,但第一个中的措辞具有误导性。您可以创建Customer
的实例,因为默认情况下它也被赋予了一个公共构造函数,而不仅仅是因为该类本身被声明为公共的。在语言级别,访问修饰符控制一件事:谁可以通过名称引用给定的程序元素。【参考方案2】:
private
类不能被任何东西使用,除非它在另一个类中。 C# 不允许非嵌套类为 private
,因为没有任何东西可以使用它。
但是,还有另一种选择:您可以将类标记为 internal
。 internal
限制对当前程序集的访问。
【讨论】:
***.com/questions/6704544/…【参考方案3】:关键字表示允许谁从这个类创建实例(对象)。如果您有相互嵌套的类,则将使用私有,并且您不能从类外部访问它。
来自MSDN
class 关键字前面是访问级别。因为在这种情况下使用了 public,所以任何人都可以从这个类创建对象。类的名称跟在 class 关键字之后。定义的其余部分是类体,其中定义了行为和数据。类中的字段、属性、方法和事件统称为类成员。
【讨论】:
以上是关于我不明白为啥一个类是“公共的”[重复]的主要内容,如果未能解决你的问题,请参考以下文章
我不明白为啥我对 Lombok 的 toString 有问题[重复]
我不明白为啥 CSS 转换在 keydown 上不起作用 [重复]
我不明白为啥这段代码不起作用 for int 错误 [重复]