0

誰もが知っているように、c# は強く型付けされた言語です。

これには長所と短所があります。

問題なく正常に動作する次のコードがあります。

   public static void SetText(Button Obj, string Text) { Obj.Text = Text; }
   public static void SetText(CheckBox Obj, string Text) { Obj.Text = Text; }
   public static void SetText(ComboBox Obj, string Text) { Obj.Text = Text; }
   public static void SetText(Label Obj, string Text) { Obj.Text = Text; }
   public static void SetText(LinkLabel Obj, string Text) { Obj.Text = Text; }
   public static void SetText(RadioButton Obj, string Text) { Obj.Text = Text; }
   public static void SetText(TextBox Obj, string Text) { Obj.Text = Text; }

   public static String GetText(Button Obj) { return Obj.Text; }
   public static String GetText(CheckBox Obj) { return Obj.Text; }
   public static String GetText(ComboBox Obj) { return Obj.Text; }
   public static String GetText(Label Obj) { return Obj.Text; }
   public static String GetText(LinkLabel Obj) { return Obj.Text; }
   public static String GetText(RadioButton Obj) { return Obj.Text; }
   public static String GetText(TextBox Obj) { return Obj.Text; }

このコードを減らす簡単な方法は、次のようなものです。

public static void SetText(Object Obj, string Text) { Obj.Text = Text; }
public static String GetText(Object Obj) { return Obj.Text; }

ただし、c# は型に関する厳密な言語であるため、機能しません。

この問題を解決するには、反射を使用できますが、使用したくありません。

代替手段があれば、多くのコードを減らすことができます。それ以外の場合は、他の機能に対してそれを行う必要があります。

いくつかのアイデア?

4

2 に答える 2

11

Windows.Forms.Controlコード内のすべての要素は、プロパティを持つ要素から派生しTextます。

public static void SetText(Control ctrl, string text) { ctrl.Text = text; }
public static String GetText(Control ctrl)            { return ctrl.Text; }

(標準の .NET 命名規則では、パラメーターに小文字の名前を使用することが推奨されていることに注意してください。)

于 2013-03-29T08:16:00.910 に答える
0

ドミトリーの答えは素晴らしく、私はそれを少し拡張しました。

Text各メソッドに自明ではないロジックがあると仮定すると (クラスのプロパティに直接アクセスできる場合、なぜそれらが必要なのかという理由でControl)、C# の拡張メソッドを利用できます。C# 3.0バージョン以降に追加された場所

public static class ControlExtensions
{
     public static void SetText(this Control ctrl, string text) 
     { 
          ctrl.Text = text;
     }

     public static String GetText(this Control ctrl)            
     { 
          return ctrl.Text;
     }
}

単純な静的メソッドの場合、呼び出しは次のようになります。

YourStaticClass.SetText(myControl, "some text");

Controlただし、拡張メソッド構文を使用すると、クラスから派生した任意のオブジェクトに次のコードを記述できます。

myControl.SetText("some text");

静的メソッドSetTextが呼び出されます

于 2013-03-29T09:00:01.773 に答える