具有相同名称的c#属性

具有相同名称的c#属性

问题描述:

如果我的问题已经有答案,请指向正确的方向。具有相同名称的c#属性

我是新来的c#和asp.net mvc。我正在开发一个项目,在这个特定的项目中,我有一个模型反映了我运行迁移时客户表的结构。看看我的客户模型:

using System; 
using System.ComponentModel.DataAnnotations; 

namespace Vidly.Models 
{ 
    public class Customer 
    { 
     public int Id { get; set; } 

     [Required] 
     [StringLength(255)] 
     public string Name { get; set; } 

     public bool IsSubscribedToNewsletter { get; set; } 

     public MembershipType MembershipType { get; set; } 

     [Display(Name = "Membership Type")] 
     public byte MembershipTypeId { get; set; } 

     [Display(Name = "Date of Birth")] 
     [Min18YearsIfAMember] 
     public DateTime? Birthdate { get; set; } 
    } 
} 

我的问题,我理解这意味着什么字符串设定为name属性 例如:

public string Name { get; set; } 

但到底是什么意思时,一些属性设置以他们自己的名义,为什么我们这样做? ex:

public MembershipType MembershipType { get; set; } 

请给出详细的回答。 谢谢。

+2

第一个'MembershipType'是数据类型(也可能是int,string,List等)。第二个是属性名称(也可能是MyMembershipType,MType,TypeOfMember等) –

+1

你可以给它任何你想要的有效名称(它没有特别的含义) –

+0

'MembershipType'是一个导航属性,它只是提供导航'MembershipType'实体。当然,您可以将给定的属性名称重命名为任何其他有效的标识符名称(例如'public MembershipType MemberType')。 –

当我的名字我的类,属性,方法,字段等我尽量遵循两个原则:

  1. 通用命名约定,例如对于字段,属性上的情况下,等小写更多关于此herehere
  2. 常识 - 一个名字解释的方法,属性的作用等

您的代码已被写入的方式其他开发人员(尤其是六个月内)可以理解它。而合理的命名是实现它的方法之一。

因此,例如,如果您的财产包含客户地址,则称其为Address是合理的。

当然地址可能很复杂 - 街道,城市,邮政编码。值得把它封装在一个单独的类中。什么是保持所有地址细节的班级的最佳名称。你猜对了:Address

所以你很容易结束与Address类型的财产和名称Address。但在这两种情况下,这都是合乎逻辑的,这对于什么样的财产持有和该类别拥有什么是自我解释的。

你的例子是相同的情况。只有我认为MembershipType是一个枚举,而不是一个类。但是,再次调用会员类型enum MembershipType并呼叫持有客户的会员资格类型的属性MembershipType也是非常有意义的。

在C#类型和值有不同的命名空间,因此,可以明确地具有称为MembershipType和具有可变(属性等)称为MembershipType

考虑稍微容易解析变量声明:

MembershipType membershipType = new MembershipType(); 
membershipType.DoStuff(); 
... etc. 

这里变量名按照惯例用小写开始 - 但我写:

MembershipType MembershipType = new MembershipType(); 
MembershipType.DoStuff(); 
... etc. 

而且语法的语言意味着它是明确的,当我的意思是类型,当我的意思是变量

无论是对人类阅读器的混淆是否更容易争论。

例如,请注意,这不是明显的从我写什么,该叫什么:

MembershipType.DoStuff(); 

解析。 DoStuff可以是类型 MemebrshipType上的静态函数,也可以是实例 MembershipType上的函数。 C#通过强制执行无法声明实例函数和具有相同名称的静态函数来解决此问题,因此它对编译器来说是毫不含糊的。然而,除非你知道MemebrshipType这个类,否则你不能单单从这个片断中知道它是什么。

+1

有一种情况是类型和字段/属性/方法名称可能会发生冲突:成员类型。 'class C {public enum X {} public X X; }' –

+0

@EdPlunkett *这是*偷偷摸摸。我同情语言设计师,试图扩展语言,同时保持语法毫不含糊和表达。 –

+1

语言设计很困难,特别是当你进入一个语言的六个或更多个版本,以及历史层。他们必须思考一切,并围绕旧的决定。 –