就是说,原来厂商的方法类似于 DoAction(Object obj) { if (obj is TextBox) ((TextBox)obj).Text = ""; } 结果你现在传了个double进来,想直接(double)obj = value? 或者其他的Object,想直接obj = value? 而且还不能把DoAction(Object obj)改成ref? 要是我理解正确的话。LZ你这个办不到啊。 你可以这样考虑一下: public class Wrapper<T> { private T _value; public T Value { get; set; } } 你的东西传进来之前,就这样包装一下吧,出去再取出来。你要添加double,就是Wrapper<double>,不知道可不可以?
然后试试
xxx.某某属性=某某值。
private void eventDemo(object sender,EventArgs e)
{
//e中的a存放一变量(A,B,C等(double类型)根据触发事件的对象不同而不同,e.a为OBJECT类型
//现在我要修改e.a这个属性所引用的那个变量的值,怎么改?
//即e.a = B 但我要改B的内容
//
}
不要怀疑.NET,在语言层面,C能做的.NET都能做。
e.a=2;
e.a=3;
随便你改啊
首先e.a是只读的。。
其次就算能改 改的也是e.a的内容。。不是B的内容
在每创建一个监控的时候 我可以添加一个对象(object) 这样在不同的变量发生改变的时候我可以直接修改我自己的对象的值(前面添加的对象) 按照厂商的DEMO 他用了TEXTBOX对象,这样当事件触发的时候直接把参数中对象转换为TEXTBOX对象 然后修改其.text属性从而直接在界面上反映出修改。但是我这里不需要testbox,我需要的是直接改我定义的变量值就可以了,所以添加监控的时候我传的参数是一个double类型的变量。问题就来了,TEXTBOX可以修改属性,但是double只能赋值,问题就是如何赋值。。
不知道大家能不能看懂?。
adsClient.AddDeviceNotificationEx("MAIN.dint1", AdsTransMode.OnChange, 100, 0, tbDint1, typeof(int)) //这个是添加一个监视 tbDint1是TEXTBOX控件,这里不需要为double类型的变量事件的DEMO
private void adsClient_AdsNotificationEx(object sender, AdsNotificationExEventArgs e)
{
TextBox textBox = (TextBox)e.UserData;
Type type = e.Value.GetType();
if(type == typeof(string) || type.IsPrimitive)
textBox.Text = e.Value.ToString();
else if(type == typeof(ComplexStruct))
FillStructControls((ComplexStruct)e.Value);
}
DoAction(Object obj)
{
if (obj is TextBox)
((TextBox)obj).Text = "";
}
结果你现在传了个double进来,想直接(double)obj = value?
或者其他的Object,想直接obj = value?
而且还不能把DoAction(Object obj)改成ref?
要是我理解正确的话。LZ你这个办不到啊。
你可以这样考虑一下:
public class Wrapper<T>
{
private T _value;
public T Value
{
get; set;
}
}
你的东西传进来之前,就这样包装一下吧,出去再取出来。你要添加double,就是Wrapper<double>,不知道可不可以?