具有相同名称的c#属性

时间:2017-06-20 00:48:25

标签: c# asp.net asp.net-mvc-5

如果我的问题已经回答,请指出正确的方向。

我是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; }

但是当某些属性设置为自己的名称时我们为什么这样做呢? 例如:

public MembershipType MembershipType { get; set; }

请详细回复。 谢谢。

2 个答案:

答案 0 :(得分:2)

当我命名我的类,属性,方法,字段等时,我尝试遵循两个准则:

  1. 一般命名惯例,例如字段为小写,属性为大写等。有关此herehere
  2. 的详细信息
  3. 常识 - 名称解释方法,属性等的角色。
  4. 您的代码必须以其他开发人员(特别是六个月内)可以理解的方式编写。合理的命名是实现它的方法之一。

    例如,如果您的媒体资源包含客户的地址,则称其为Address是合理的。

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

    因此,您很容易得到类型为Address且名称为Address的属性。但在这两种情况下,它都是合乎逻辑的,它对于什么属性和类所持有的东西都有自我解释。

    你的例子是同样的情况。只有我认为MembershipType是一个枚举而不是一个类。但同样,调用成员资格类型枚举MembershipType并调用包含客户成员资格类型的属性是完全合理的:MembershipType

答案 1 :(得分:0)

在C#中,类型和值具有不同的名称空间,因此您可以明确地拥有一个名为 MembershipType 类型并具有变量(属性等) 。)名为 MembershipType

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

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

此处变量名称按惯例以小写字母开头 - 但我可以写:

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

当我指的是类型时,语言的语法意味着它是明确的,当我指的是变量时。

然而,对于人类读者的混淆是否更容易引起辩论。

例如,请注意,从我所写的内容来看,这一点并不明显,电话:

MembershipType.DoStuff();

解析为。 DoStuff可以是类型 MemebrshipType上的静态函数,也可以是实例 MembershipType上的函数。 C#通过强制您不能声明实例函数和具有相同名称的静态函数来解决这个问题,因此它对编译器来说是明确的。但是,除非您知道MemebrshipType类,否则您无法单独从此代码段中分辨出它是什么。