string stringName {get; set;} 和 stringName stringName {get; set;} 的区别。

3
我刚开始学习C#,看到了这样的东西:
public class Name
{
  string FirstName {get; set;}
}

VS

public class Name
{
  FirstName FirstName {get; set;}
}

有人能解释一下这两者之间的区别吗?什么时候使用其中一个而不是另一个?

7
只有当你有一个名为FirstName的类、结构体、枚举或委托类型时,第二个才是合法的。 - Joel Coehoorn
2个回答

6

第一个声明表明属性的类型是string

string FirstName {get; set;}

第二个声明表明该属性的类型为FirstName
FirstName FirstName {get; set;}

所以我想象你的情景是这样的:
public class Name
{
    public FirstName FirstName {get;set;}
    public LastName LastName {get;set;}
}

public class FirstName 
{
    public string Name {get;set;}
}

public class LastName
{
    public string Name {get;set;}
}

在C#中,有两种数据类型: 1.内置 - 它们是语言的一部分。 2.用户定义 - 它们是您的代码或您正在使用的库的代码的一部分。 String(或者使用其完全限定名称:System.String)是语言本身的一部分。有些类型是.NET框架的一部分,你可以认为它们与1相同。
其他类型在代码中定义,或者是你使用的第三方库的代码。这些被视为用户定义的类型。在你的情况下,FirstName 将是一个用户定义的类型(可能是一个class或一个struct)。

我们可以说它有明确定义的数据类型(FirstName)吗? - kvk30
@kvk30 你是什么意思? - ProgrammingLlama
字符串是.net或任何编程语言中的内置数据类型。任何编程语言都可以允许我们定义自己的数据类型,对吧?同样,在这种情况下,他定义了自己的数据类型名称为“FirstName”。如果有任何错误,请纠正我。 - kvk30
你在说哪一个说不行? - kvk30
让我们在聊天中继续这个讨论 - kvk30

1
我会尽可能简单地回答。在这里,FirstName FirstName {get; set;}
FirstName // type identifier
FirstName // identifier
{get; set;} // access modifier

由于 "类型标识符" 位置上的 FirstName 是一种类型,因此您的问题归结为,“stringFirstName 之间有什么区别?”我们都知道名为 System.String 的类型,简称为 string,由 Microsoft 提供。但是 FirstName 又是什么呢?它的完整命名空间是什么?这有点像问 stringint 之间的区别。它们都是类型,都派生自 object,但其他一切都不同。现在,一个类可以像这样:
class FirstName
{
    FirstName FirstName {get; set;} 
}

在这种情况下,您有一个包含属性FirstName的类FirstName,该属性将返回(如果设置)类型为FirstName的对象,该对象与由类FirstName定义的相同对象类型相同,并且将包含一个属性FirstName,依此类推。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接