如何把控件的类型 当参数|

zmidl 2012-10-15 10:38:18
我有这样一段代码
......//省略
if(cl is Lable)//如果foreach里的cl 是标签的话
{
aa();
}
if (cl is button)//如果是按钮的话
{
aa();//由于方法aa 一样 我想优化简练代码
}

我想用方法的参数来写
void 判断控件方法(控件类型 c_l)
if(cl is c_l)
{
aa();
}
要实现如上的效果 参数如何写呢 是 object 还是 class呢?
...全文
237 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
小枪 2012-10-20
  • 打赏
  • 举报
回复
控件的基本父类不是object 而是control 转成contorl 用的时候强转
  • 打赏
  • 举报
回复
假设忽悠你的逻辑问题 --> 假设忽略你的逻辑问题

不是“忽悠”问题,是忽略。
  • 打赏
  • 举报
回复
假设忽悠你的逻辑问题,单看编程问题,这个程序应该类似这样:
  void 判断控件方法(Type c_l)
if(c_l.IsAssignableFrom(cl.GetType()))
{
aa();
}


如果你不考虑继承关系,那么可以这样写:
  void 判断控件方法(Type c_l)
if(c_l==cl.GetType())
{
aa();
}
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我想用方法的参数来写
void 判断控件方法(控件类型 c_l)
if(cl is c_l)
{
aa();
}
要实现如上的效果 参数如何写呢 是 object 还是 class呢?[/Quote]
在你的“判断控件方法”方法中,怎么会取到cl变量呢?这个不合语法,凭空出现一个cl变量,首先在逻辑上一眼就看出还没有想明白(哪怕只有一两行代码,你也是没有想想,就动手去写了)。
threenewbee 2012-10-19
  • 打赏
  • 举报
回复
关键是你要给出你高层的需求,而不是把你的实现方式当作需求来提问,这样你收获的答案会更直接一些。
zmidl 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
if ((new Type[] { typeof(Button), typeof(Label) }).Contains(c1.GetType()))
...
[/Quote]
我如果要放再多一些类型的话就要全部枚举出来了。
zmidl 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
不是可以这样写吗?

if(c1 is Label || c1 is Button)
{
aa();
}
[/Quote]
目前我是这样写的,但是以后要代码重用不就麻烦了吗 我要优化 要面向对象啊
zmidl 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
参数当然是object了,如果你用的是4.0以上的版本,可以用dynamic类型作为参数。
[/Quote]
我是vs08的 是3.5的估计
threenewbee 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

不知道具体使用场合,通用操作使用webControl

非通用操作,采用查表法,直接把需要操作的类型用字典保存在一起,直接查表
[/Quote]

其实应该用委托,让调用者决定用什么操作。唉,可是他们不会委托。
wanghui0380 2012-10-15
  • 打赏
  • 举报
回复
不知道具体使用场合,通用操作使用webControl

非通用操作,采用查表法,直接把需要操作的类型用字典保存在一起,直接查表
threenewbee 2012-10-15
  • 打赏
  • 举报
回复
private bool compareType(Type targetType, object con)
{
if (con.GetType().Equals(targetType))
{
return true;
}
else
{
return false;
}
}
这样写很蛋疼

private bool compareType(Type targetType, object con)
{
return con.GetType().Equals(targetType);
}
就行了。
  • 打赏
  • 举报
回复

private bool compareType(Type targetType, object con)
{
if (con.GetType().Equals(targetType))
{
return true;
}
else
{
return false;
}
}



Button btn1 = new Button();
bool check1 = compareType(typeof(Button), btn1);

不过这样子没有什么优势
种草德鲁伊 2012-10-15
  • 打赏
  • 举报
回复
这样的大量判断既不能省代码,还会让程序更加难看
__天涯寻梦 2012-10-15
  • 打赏
  • 举报
回复
object 可以,class 不可以
void 判断控件方法(object c_l)
雪饮 2012-10-15
  • 打赏
  • 举报
回复
不是可以这样写吗?

if(c1 is Label || c1 is Button)
{
aa();
}
宝_爸 2012-10-15
  • 打赏
  • 举报
回复
类型应该是Type吧:http://msdn.microsoft.com/zh-cn/library/system.type(v=vs.80).aspx

但是不觉得传类型不好,还是传实例好点(c1).

参数可以使用控件的基类型System.Web.UI.WebControls.WebControl,假设你但是webform.
threenewbee 2012-10-15
  • 打赏
  • 举报
回复
if ((new Type[] { typeof(Button), typeof(Label) }).Contains(c1.GetType()))
...
qldsrx 2012-10-15
  • 打赏
  • 举报
回复
参数当然是object了,如果你用的是4.0以上的版本,可以用dynamic类型作为参数。
zmidl 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 9 楼 的回复:

不知道具体使用场合,通用操作使用webControl

非通用操作,采用查表法,直接把需要操作的类型用字典保存在一起,直接查表


其实应该用委托,让调用者决定用什么操作。唉,可是他们不会委托。
[/Quote]
用了silverradiance的方法成功实现了,感觉这里用委托大材小用了。caozhy说到委托我想到了之前一样的情况我是用委托实现的回调方法的。感谢各位进来回帖,结贴。
事理 2012-10-15
  • 打赏
  • 举报
回复


Control难道不行吗,而且还不用类型转换

void 判断控件方法(Control c_l){}
加载更多回复(4)

110,825

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧