2016-08-07 10 views
2

私はEmployeeクラスを持っている:"FirstName"と "LastName"がある場合、プロパティ "FullName"が悪いですか?

class Employee 
{ 
    string FirstName { get; set; } 
    string LastName { get; set; } 
} 

は時々私は完全な名前を取得したいと、それは何度も何度も何度もemp.FirstName + emp.LastNameを書くために退屈です。

FullNameプロパティを追加するのは悪い習慣です(同じデータが2回あるからです)。

class Employee 
{ 
    string FirstName { get; set; } 
    string LastName { get; set; } 
    string FullName 
    { 
     get 
     { 
      return string.Format("{0} {1}", FirstName, LastName); 
     } 
    } 
} 
+3

私はそうは思わない。あなたがプロパティを使用する場合は、それを繰り返し連結するのではなく、呼び出す方が簡単です。 「簡単」とは何か、「きれい」は常に良いです。 –

+0

悪い習慣であるという議論は何ですか? – Veverke

+0

あなたは完璧に進んでいます – jonju

答えて

6

これは同じデータではありません。実際には、これを追加することで繰り返しコードを削減しています。

FullNameが計算されず、FirstName/LastNameの横に維持(同期、設定など)されなければならないと悪くなります。

1

FullNameプロパティの代わりに、ToString()メソッドを提供して、あなたが望むものを正確に返すことができます。

public override string ToString() 
{ 
    return string.Format("{0} {1}", FirstName, LastName); 
} 

MSDNのドキュメントを見てみましょう:How to: Override the ToString Method (C# Programming Guide)

使用法:逆に

Employee emp = new Employee(); 
emp.FirstName = "Maciej"; 
emp.LastName = "Los"; 
Console.WriteLine("Employee: {0}", emp.ToString()); 
//returns: "Employee: Maciej Los" 
+0

私は 'ToString'をオーバーライドするのが最善の解決策ではないと思いますが、明快さのために' Fullname'プロパティを優先します。また、追加のプロパティを持つこともできます。これは、 'ToString'では考慮されなければならないが、' Fullname'では考慮されない可能性があります。 – derpirscher

1

、これはそれを行うための正しい方法です。 FirstNameとLastNameの間にタイトルを追加する必要がある場合(ただし、与えられている場合のみ)を想像してください。 FullNameのようなreadonlyプロパティをどこでも使用する場合は、変更を1回だけ行う必要があります。 2つの別々のプロパティを使用する場合は、どこにでも移動して変更を加える必要があります(ifsと結果を適切に形成するために必要なものすべて)

関連する問題