C# 对类型和类使用相同的标识符:该语法的语义效果如何?

C# 对类型和类使用相同的标识符:该语法的语义效果如何?,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我试图了解嵌套属性的详细信息,这似乎是一个很好的资源: 在文件Order.cs中,我发现了一个不寻常的结构: public Customer Customer { get { return _customer; } set { _customer = value; OnPropertyChanged("Customer"); } } 注意标识符Customer如何用于两种不同的目的。IILC,无论是C++还是java都不允许使用

我试图了解嵌套属性的详细信息,这似乎是一个很好的资源:

在文件
Order.cs
中,我发现了一个不寻常的结构:

public Customer Customer
{
    get { return _customer; }
    set
    {
        _customer = value;
        OnPropertyChanged("Customer");
    }
}
注意标识符
Customer
如何用于两种不同的目的。IILC,无论是C++还是java都不允许使用这种混淆的方法。 这个咒语有特殊的意义和后果吗

这一次,我没有要求快速提示,而是在努力学好这门学科(“如果你给一个人一条鱼,你就喂他一天;如果你教他如何钓鱼,你就喂他一辈子”)

短暂性脑缺血发作


注:我甚至不确定我的主题行是否正确-请随意更正。

第一个客户指的是一种称为客户的类型。 第二个是属性的名称

这在C#中没有什么不寻常的

在Java中,您可以编写:

Customer getCustomer()
void setCustomer(Customer customer)
C#提供了一种方便的方法,可以在单个成员中声明
getX()
setX()
,通常称为
X

这没有什么特别的意义,编译器足够聪明,能够理解类型在名称之前,所以在任何情况下都可以计算出来

话虽如此,VisualStudio中的intellisense可以处理的信息较少(当您键入时),因此有时可以有多个选项。考虑静态成员,例如

public class Customer
{  
  public static Customer NewCustomer()
  ...

  public string Name { get;set;}
}
现在,当您键入以下内容时

public class Order
{
   public Customer Customer { get;set; }
   public void DoSomething()
   {
       Customer.
客户
的含义是什么?它是一种类型吗?在这种情况下,我们应该允许用户访问
NewCustomer
方法。还是财产?在这种情况下,他们需要
Name
属性


VS所做的是让您可以同时访问这两个名称,因为只要选择一个,含义就很清楚了。

它没有任何特殊含义,只是意味着开发人员无法想出两个不同的名称。在这种特殊情况下,编译器可以确定第一个客户引用了类,第二个客户是属性的名称,因为只有一种正确的编写方法。没错,java没有真正的属性,只有“基于约定”的东西(这很可怕),并迫使您键入无用的样板(
getXXX()
-
setXXX()
)-C编译器足够聪明,可以找出哪一个是类型,哪一个是标识符或属性名。在这种情况下,“VM”是什么?虚拟模型?可视化模型?在WPF中,它是MVVM的ViewModel部分,即模型视图ViewModel