2017-06-20 241 views
0

如果我的問題已經有答案,請指向正確的方向。具有相同名稱的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')。 –

回答

2

當我的名字我的類,屬性,方法,字段等我儘量遵循兩個原則:

  1. 通用命名約定,例如對於字段,屬性上的情況下,等小寫更多關於此herehere
  2. 常識 - 一個名字解釋的方法,屬性的作用等

您的代碼已被寫入的方式其他開發人員(尤其是六個月內)可以理解它。而合理的命名是實現它的方法之一。

因此,例如,如果您的財產包含客戶地址,則稱其爲Address是合理的。

當然地址可能很複雜 - 街道,城市,郵政編碼。值得把它封裝在一個單獨的類中。什麼是保持所有地址細節的班級的最佳名稱。你猜對了:Address

所以你很容易結束與Address類型的財產和名稱Address。但在這兩種情況下,這都是合乎邏輯的,這對於什麼樣的財產持有和該類別擁有什麼是自我解釋的。

你的例子是相同的情況。只有我認爲MembershipType是一個枚舉,而不是一個類。但是,再次調用會員類型enum MembershipType並呼叫持有客戶的會員資格類型的屬性MembershipType也是非常有意義的。

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這個類,否則你不能單單從這個片斷中知道它是什麼。

+1

有一種情況是類型和字段/屬性/方法名稱可能會發生衝突:成員類型。 'class C {public enum X {} public X X; }' –

+0

@EdPlunkett *這是*偷偷摸摸。我同情語言設計師,試圖擴展語言,同時保持語法毫不含糊和表達。 –

+1

語言設計很困難,特別是當你進入一個語言的六個或更多個版本,以及歷史層。他們必須思考一切,並圍繞舊的決定。 –

相關問題