一种在C#中减少和优化此代码的方法

时间:2013-03-29 08:12:25

标签: c# .net

众所周知,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#是关于该类型的严格语言。

要解决这个问题,我可以使用反射,但我不想这样做。

如果有一个altenative我可以减少很多代码,否则我必须为其他函数做。

有些想法?

2 个答案:

答案 0 :(得分: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命名约定建议使用参数的小写名称。)

答案 1 :(得分: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