为什么我必须在C#中同时拥有访问修饰符和构造函数?

时间:2015-04-23 20:23:06

标签: c# string

在下面的简单程序中,为什么必须首先将其定义为私有,然后创建构造函数?我想我认为它首先是私有的,因为你不希望它被改变(我认为),然后你在公共场合再次定义它,以便可以在不同的类中查看,但为什么我必须以不同的方式命名?

我试图在别处寻求帮助,他们说“在C中你需要一个带有默认参数的类的变量的构造函数来初始化它。所以当你在主应用程序中运行它时,编译器知道它是什么。”但我不确定这意味着什么。这似乎有点复杂。

class Name
{
       private String first, middle, last;
       public Name(String fname, String mname, String lname)
       {
             first = fname;
             middle = mname;
             last = lname;
        }
 }
 class Program
 {
       static void Main(String[] args)
       {
           Name myName = new Name("John", "Richard", "Smith");

        }
  }
}

2 个答案:

答案 0 :(得分:1)

private关键字表示该变量在其定义的类之外不可见。例如,如果您要在Main()中编写代码,尝试访问firstmiddlelast变量,则会出现错误。变量只能由Name类中的代码私有访问。

相比之下,构造函数是public,因此它可以在定义它的类之外显示。这就是当您从Main()方法访问构造函数时没有收到错误的原因。

答案 1 :(得分:1)

您不必在构造函数之前定义私有变量,尽管您养成这样做的习惯很好,因为它可以帮助您保持代码的结构化和清洁。

C不是C#所以不用担心其他人说的话,

但是我会对它做出一些改变。

您的示例中缺少的内容称为public accessibility modifier,以便人们可以阅读您已设置的名称,这些名称目前是私有的,因此没有人比自己更了解他们......

想象一下基于这个例子的真实世界,你希望其他人能够读懂你的名字,知道你是谁,但你不会希望他们能够随意改变你的名字,它和#39;是你的名字。所以这里有相同的原则,我们允许其他人读取值,但不写入。

public class Name
{
       private string firstName;
       private string lastName;

       public Name(String firstName, String lastName)
       {
             this.firstName = firstName;
             this.lastName  = lastName;
       }

       public string FirstName { get { return this.firstName; } }
       public string LastName  { get { return this.lastName; } }
 }

 class Program
 {
       static void Main(String[] args)
       {
           Name myName = new Name("John", "Richard");
           Console.WriteLine(myName.FirstName);
           Console.WriteLine(myName.LastName);
       }
 }