2017-06-20 31 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; } 

が、いくつかのプロパティが設定されている場合、それは何を意味しています自分の名前に、なぜ私たちはそれをしますか? 例:

public MembershipType MembershipType { get; set; } 

詳細な回答をしてください。おかげさまで

+2

最初の 'MembershipType'はデータ型です(int、string、Listなども可能です)。 2番目はプロパティ名です(MyMembershipType、MType、TypeOfMemberなどもあります) –

+1

任意の有効な名前を付けることができます(特別な意味はありません) –

+0

'MembershipType'はナビゲーションプロパティです。 'MembershipType'エンティティ。もちろん、指定されたプロパティ名を他の有効な識別子名(例えば、 'public MembershipType MemberType')に変更することもできます。 –

答えて

2

私は私のクラス、プロパティ、メソッド、フィールドなどに名前を付けるとき、私は2つのガイドラインに従うことを試みる:例えば、

  1. 一般的な命名規則をなどのフィールド、プロパティの大文字、のための下部ケースは、このhereまたはhere
  2. 常識の詳細 - 名前が

あなたのコードが途中書き込まれるようにしているメソッド、プロパティの役割などを説明します他の開発者(特に6ヶ月)が理解できる。そして、合理的な命名法は、それを達成するための方法の1つです。

たとえば、お客様のプロパティにお客様の住所が含まれている場合は、Addressとしてください。

もちろん、住所は、ストリート、シティ、郵便番号のように複雑なものにすることができます。それを別のクラスにカプセル化する価値があります。そして、すべてのアドレスの詳細を保持するクラスのための最良の名前は何でしょうか。あなたはそれを推測した:Address

したがって、タイプAddressと名前Addressのプロパティで簡単に終わることができます。しかしどちらの場合も、それは論理的です。それは、財産が保持しているものとクラスが保持しているものを自明に示しています。

あなたの例は同じです。私はMembershipTypeがクラスではなくenumであると仮定します。しかし、再び、メンバーシップタイプenum MembershipTypeを呼び出し、顧客のメンバーシップタイプを保持するプロパティーを呼び出すことは理にかなっています:MembershipType。 C#の型と値で

0

は明確な名前空間を持っている、それゆえ、あなたは明確MembershipType呼ばタイプを持っており、変数(プロパティなど)を持つことができますMembershipTypeと呼ばれます。

は、変数の宣言を解析少し簡単に考えてみましょう:

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

ここでは、変数名は慣例により、小文字で始まる - 私でし書き込み:

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

と構文言語の意味は、私がタイプを意味し、変数を意味するとき、それが明確であることを意味する。

人の読者に混乱を与えているかどうかは、議論の余地がありますが、です。例えば

、コール何、それは私が書いたものとは明らかではないことに注意してください。

MembershipType.DoStuff(); 

が解決されます。 DoStuffは、タイプの MemebrshipTypeの静的関数であるか、インスタンス MembershipTypeの関数である可能性があります。 C#は、同じ名前のインスタンス関数と静的関数を宣言できないことを強制することによってこの問題を回避します。そのため、コンパイラはあいまいではありません。しかし、あなたがクラスMemebrshipTypeを知らない限り、このスニペットだけからどれが来たのかを知ることはできません。

+1

タイプとフィールド/プロパティ/メソッドの名前が衝突するケースが1つあります。メンバータイプ。 'クラスC {public enum X {} public X X; } ' –

+0

@EdPlunkett *これは*卑劣です。私は、言語デザイナーに同情し、構文をあいまいでなく表現力豊かにしながら言語を拡張しようとしています。 –

+1

言語のデザインは厳しいです。特に、6つ以上のバージョンの言語に加えて、複数の歴史がある場合は難しいです。彼らはすべてを考えなければならず、古い決定を回避する必要があります。 –

関連する問題