Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net IronPython中的默认成员/属性_.net_Properties_Ironpython - Fatal编程技术网

.net IronPython中的默认成员/属性

.net IronPython中的默认成员/属性,.net,properties,ironpython,.net,Properties,Ironpython,如果直接使用对象实例,是否有可能使IronPython访问对象的默认属性 IronPython访问的值在我们的程序中包装在某个类变量对象中,始终具有T类型的属性命名为Value。当我写作时 if someBoolVariable: print "Hello World" IronPython检查是否存在可布尔变量!=null,在我们的例子中,它总是正确的。相反,我更希望它检查someBoolVariable.Value 数字变量也是如此: Temp = someDoubleVariab

如果直接使用对象实例,是否有可能使IronPython访问对象的默认属性

IronPython访问的值在我们的程序中包装在某个类变量对象中,始终具有T类型的属性命名为Value。当我写作时

if someBoolVariable:
    print "Hello World"
IronPython检查是否存在可布尔变量!=null,在我们的例子中,它总是正确的。相反,我更希望它检查someBoolVariable.Value

数字变量也是如此:

Temp = someDoubleVariable + someDoubleVariable
返回类型中未实现add运算符的错误。我想让它自动计算为Temp=someDoubleVariable.Value+someDoubleVariable.Value

我仍然希望能够访问对象的其他属性。因此,在超出范围时不可能转换对象。我已经尝试附加DefaultMemberAttribute和/或DefaultPropertyAttribute,但似乎没有任何效果

编辑:


对于bool变量,这是其中一个重要的组,我已经找到了我的答案。但是,对于数值,这也很好。理论上,我可以为所有算术运算创建方法,但它们的数量非常多——特别是在混合不同类型时。。。最好有一个像uuu value uuuu或uu self uuu这样的方法,它似乎不存在,只返回要使用的值而不是对象…

我找到了布尔语句和表达式的部分解决方案:使变量按照我期望的方式运行,您只需实现一个名为_非零__的特殊函数:

如果对象现在在布尔语句和表达式中使用,则计算其值,而不是检查其是否为null


一个缺点是:实现此方法的对象必须是公共的,否则python会忽略它。也有可能将其实现为静态函数,但是我不确定如何将其注册到python以便使用。

IronPython不支持默认属性,我认为VB是唯一支持的语言。最好的办法是使用dynamic实现变量上的运算符,这应该使它易于管理。如果您在普通的C风格中重载它们,IronPython将使用它们,或者您可以实现Python的_*._u方法

例如,未经测试:

public static dynamic operator +(Value<t> v, dynamic d) {
  return v._value + d;
}

嘿,静态-动态。

为什么这个标签是C?其他语言支持吗?我知道VB在定义索引器时使用了这个术语,但我从未见过在您想要的上下文中使用它。IronPython脚本在C应用程序中使用,因此,所有类/对象都是在C中定义的。您可能应该标记.net或clr而不是C。您是否看过使用来处理数字类型的展开?我已将C更改为.net。但是,隐式转换运算符仅在将值赋给变量时使用,该变量只能使用静态类型语言(如C)或调用预期目标类型的函数时使用。它们不用于算术运算符。
public static dynamic operator +(Value<t> v, dynamic d) {
  return v._value + d;
}