我不明白为啥一个类是“公共的”[重复]

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?我对publicprivate 这两个词的理解是,只有当它们是类中的函数时它们才有意义,而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,因为没有任何东西可以使用它。

但是,还有另一种选择:您可以将类标记为 internalinternal 限制对当前程序集的访问。

【讨论】:

***.com/questions/6704544/…【参考方案3】:

关键字表示允许谁从这个类创建实例(对象)。如果您有相互嵌套的类,则将使用私有,并且您不能从类外部访问它。

来自MSDN

class 关键字前面是访问级别。因为在这种情况下使用了 public,所以任何人都可以从这个类创建对象。类的名称跟在 class 关键字之后。定义的其余部分是类体,其中定义了行为和数据。类中的字段、属性、方法和事件统称为类成员。

【讨论】:

以上是关于我不明白为啥一个类是“公共的”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我不明白为啥我对 Lombok 的 toString 有问题[重复]

我不明白为啥 CSS 转换在 keydown 上不起作用 [重复]

我不明白为啥这段代码不起作用 for int 错误 [重复]

我的 Outer Apply 语句中有语法错误,我不明白为啥[重复]

我不明白为啥会这样编译

我不明白为啥这个@selector 不起作用