C# 非常基本:类和对象的语法
我觉得这本应该在第1课的第1页的某个地方解释,但要么没有解释,要么我错过了 如果存在以下类别:C# 非常基本:类和对象的语法,c#,C#,我觉得这本应该在第1课的第1页的某个地方解释,但要么没有解释,要么我错过了 如果存在以下类别: class Person { public string name {get; set;} public int age {get; set;} } 后来我做了这个: Person myUncle = new Person(); 为什么我一开始就需要第一个人 我知道我正在创建一个名为“myUncle”的“Person”类型的新对象 为什么我们一开始就有那个人?可以换一个人吗;还有别的吗 我
class Person
{
public string name {get; set;}
public int age {get; set;}
}
后来我做了这个:
Person myUncle = new Person();
为什么我一开始就需要第一个人
我知道我正在创建一个名为“myUncle”的“Person”类型的新对象
为什么我们一开始就有那个人?可以换一个人吗;还有别的吗
我所看到的每一个教程/书籍都只是在这一部分中滚动,作者说“好吧,现在我们以这种方式创建一个新实例…”,但从来没有解释语法为何是这样。左侧声明了一个
Person
类型的变量
class Child : Person
{
public bool isChildish {get; set;}
}
右侧创建类型为Person
的对象
class Child : Person
{
public bool isChildish {get; set;}
}
=
将左边的变量分配给右边的对象
您可能会问,为什么不能C#
找出我想要的变量类型?
答案是,它可以:
var myUncle = new Person();
但是,在某些情况下,可能需要显式声明类型。
这是一个稍微做作的示例,但假设我有一个新类,它是Person
的子类
class Child : Person
{
public bool isChildish {get; set;}
}
然后,我可以声明一个Person
类型的变量来保存Child
类型的对象
Person myUncle = new Child();
现在,左边的人
看起来没有那么多余了
Update:您可能希望Person-myUncle
超过var-myUncle
的一个原因是您可以将声明与初始化分开
将编译以下代码:
Person myUncle;
myUncle = new Person();
以下代码将不会编译
var myUncle;
myUncle = new Person();
我喜欢这样思考:右侧是对象“实际上是什么”,左侧是您将“告诉”应用程序的其他部分对象是什么。因此,在像您这样的基本示例中,您正在创建一个Person,并告诉应用程序的其余部分这是一个Person对象,但您不必总是确切地揭示对象是什么。例如:
Person p1 = new Doctor();
Person p2 = new Teacher();
IService s = new ServiceImpl();
IEnumerable<Person> personEnum = new List<Person>();
Person p1=新医生();
人员p2=新教师();
iSeries s=新的ServiceImpl();
IEnumerable personEnum=新列表();
在前两个示例中,您正在创建从Person继承的两个对象doctor和teacher,但通过p1或p2的应用程序的任何部分都只知道它是Person对象。在第三个示例中,对象实际上是ServiceImpl类型,但应用程序的其余部分只知道这是一个实现IService接口的对象
所有这些都是为了保持应用程序的松散耦合,只需要尽可能多地揭示实际对象。事实就是如此。长话短说,C#要求所有变量都是类型化的,这就是为什么要在声明时指定变量的类型。var关键字是语法糖,即编译器用实际类型替换“var”。但是“我叔叔”永远是一个人或一个子类人,所以从功能上讲,var-my叔叔和Person-my叔叔没有区别,做一个而不做另一个的唯一原因是。。?为了可读性?是的,在这种情况下没有功能上的区别。我认为这是个偏爱的问题。来自C等语言的人有时更喜欢自己的类型是显式的。@user3565424,但是请注意,您不能声明
var-mybuff代码>本身在一行上,但您可以轻松地声明Person myUncle代码>单独在一行上。这是一个重要的区别,如果您需要将声明和赋值分开,它可能会变得更加重要。