2017-12-05 4 views
0

私はクラスが重要であり、このクラスのいくつかのオブジェクトが作成されています。私はこのクラスの主なオブジェクトを選択することができます。以下のコードをご覧ください:C#このクラスの主なオブジェクトのインジケータとしての静的でないクラスの静的プロパティ

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     Important imp1 = new Important("Important 1"); 
     Important imp2 = new Important("Important 2"); 
     Important imp3 = new Important("Important 3"); 

     imp2.SetMostImportant(); 

     Console.Write(Important.MostImportant.Name); 
    } 

    public class Important 
    { 
     public Important(string name) 
     { 
      Name = name; 
      if(MostImportant == null) 
       SetMostImportant(); 
     } 

     public string Name { get; private set; } 
     public static Important MostImportant { get; private set; } 

     public void SetMostImportant() 
     { 
      MostImportant = this; 
     } 
    } 
} 

良い解決策ですか?そうでない場合は、どうか教えてください。

前に、この種のものを実現するために、私はブール値のフィールドを作成しました。 IsMainObjectを使用して、メインオブジェクトを変更したいときは、メインにしたい要素を除く特定のクラスのオブジェクト(またはオブジェクトのグループ)全体を反復処理し、ブール値をfalseに変更しました。 。以下の例:MostImportantは反復せずに、複数のオブジェクトの場合はtrueである場合、私は知らない

  1. public class Program 
    { 
        public static void Main(string[] args) 
        { 
         Important imp1 = new Important("Important 1"); 
         Important imp2 = new Important("Important 2"); 
         Important imp3 = new Important("Important 3"); 
         List<Important> list = new List<Important> { imp1, imp2, imp3 }; 
    
         foreach(var item in list.Where(x => x.Name != "Important 2")) 
         { 
          item.SetMostImportant(false); 
         } 
    
         imp2.SetMostImportant(true); 
         Console.Write(list.FirstOrDefault(x => x.MostImportant == true).Name); 
        } 
    
        public class Important 
        { 
         public Important(string name) 
         { 
          Name = name; 
         } 
    
         public string Name { get; private set; } 
         public bool MostImportant { get; private set; } 
    
         public void SetMostImportant(bool val) 
         { 
          MostImportant = val; 
         } 
        } 
    } 
    

    ので、私は、このソリューションが好きではありません。

  2. もっと多くのケースを処理するために、余分なコードを書く必要があります。
  3. 私は常に特定のクラスのすべてのインスタンスを反復処理する必要はありません(グループでは必ずしも十分ではありません)。

...とはるかに、しかしあなたはアイデアを得ました。

+0

あなたが解決しようとしているビジネスや技術的な問題の文脈なしに良いか悪いかを判断する方法は本当にありません。そのコードは、あなたが達成したいものを達成していますか?それで少なくともそのメリットだけで十分です。それは改善することができますか?おそらくはい、それはどのような面で改善している質問に答えるかによって決まりますか?これは、質問の特異性の欠如のために、幅広い意見に基づく回答の対象となります。 – LB2

答えて

1
public static Important MostImportant { get; private set; } 

は罰金ソリューションであり、そしてより良い

public bool MostImportant { get; private set; } 

よりも、それは「シングルトン」のクラスを実装するときの内側の型の静的プロパティを持つことが珍しくありません。私はこのようなコードを書いています:

class MyClass 
{ 
    public static MyClass Instance { get; private set; } 
    public MyClass() 
    { 
     if (Instance == null) 
     { 
      Instance = this; 
     } 
     else 
     { 
      throw new Exception("MyClass already instantiated."); 
     } 
    } 
} 
関連する問題