众所周知,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我可以减少很多代码,否则我必须为其他函数做。
有些想法?
答案 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