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