首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么转换对象类型

2012-02-28 
如何转换对象类型?下面代码的目的是传入一个控件对象(TextBox/button等),再设置其属性。那么应该如何转换对

如何转换对象类型?
下面代码的目的是传入一个控件对象(TextBox/button等),再设置其属性。那么应该如何转换对象,以便统一设置对象共同的属性?
public void DoIt(object obj)
{
//如何转换?为避免重复代码,不考虑此方式:((TextBox)obj).Height = new Unit(400);
obj.Height = new Unit(400);
}

[解决办法]
为什么参数是object ??而不是Control??

public void DoIt(object obj) 

Control control = obj as Control;
if (control != null) control.Height = new Unit(400); 
}
[解决办法]
public void DoIt(ref Control c) 

c.Height = 400;
}
[解决办法]
ding 一楼
[解决办法]
public void DoIt(object obj)
{
//如何转换?为避免重复代码,不考虑此方式:((TextBox)obj).Height = new Unit(400);
obj.Height = new Unit(400);
}
----------------------------------------------------

看你上面的代码,反回类型为void,而参数是一个object,这种设计不合理,设计一个方法,就应该知道它的返回值类型,如果连设计者都不清楚它具体的返回类型,
这个方法是无意义的。 

你的出发点可能是想写一个通用的方法能够设定所有未知Control类型的属性,但参数是OBJECT,告诉人家这个方法接受任意类型的数据,而且没有返回值,这个不符合常理吧??

比较好的方案是做一个接口或是抽像类,然后实现或继承这个接口或抽像类。

C# code
public abstract class MyObject{    public abstract Control SetMyControl(Control sourceControl);}public class TestObject : MyObject{    public override Control SetMyControl(Control sourceControl)    {        if (Control is TextBox)  //[b]你知道你的Control是什么类型[/b]        {           TextBox textBox = (TextBox)Control;            //Your Code here           return texBox        }        else if (Control is Repeater)        {           //Your Code here           //return a repeater        }        else return null;    }}public class SecondTestObject : MyObject{    public override Control SetMyControl(Control sourceControl)    {        if (Control is CheckBox)  //[b]我知道我的Control是什么类型[/b]        {            CheckBox checkBox = (CheckBox)Control;            //Your Code here            return checkBox;        }        else if (Control is DataList)        {           //Your Code here           //return a DataList        }        else return null;    }}
[解决办法]
UP!!!!!

热点排行