Mik*_*e U 13 c# reflection operator-overloading
这是交易.我有一个程序将加载给定的程序集,解析所有类型及其成员并编译TreeView(非常类似于旧的MSDN站点),然后为TreeView中的每个节点构建HTML页面.它基本上采用给定的程序集,并允许用户为文档目的创建自己的类似MSDN的库.
这是我遇到的问题:只要在定义的类中包含操作符重载,反射就会将其返回为"MethodInfo",其名称设置为"op_Assign"或"op_Equality".我希望能够捕获这些并正确列出它们,但我在MethodInfo对象中找不到任何返回的内容,以准确识别我正在查看运算符.
我绝对不想只捕获以"op_"开头的所有内容,因为这肯定会(在某些时候)会选择一个它不应该采用的方法.我知道像这样的"特殊情况"的其他方法和属性设置了"IsSpecialName"属性,但显然不是运算符的情况.
我一直在搜索网络,并且在两天内试图弄清楚这一点,所以任何帮助都将非常感激.
Wes*_*ser 17
op_命名约定是.net的标准或事实标准.反思时,我会做这样的事情:
public void GenerateDocForMethod(MethodInfo method)
{
if(method.Name.StartsWith("op_"))
GenerateDocForOperator(method);
else
GenerateDocForStandardMethod(method);
}
public void GenerateDocForOperator(MethodInfo method)
{
switch(method.Name)
{
case "op_Addition":
//generate and handle other cases...
//handle methods that just happen to start with op_
default:
GenerateDocForStandardMethod(method);
}
}
public void GenerateDocForStandardMethod(MethodInfo method)
{
//generate doc
}
Run Code Online (Sandbox Code Playgroud)
GenerateDocForOperator将打开所有可重载的运算符(不要忘记隐式和显式转换).如果方法名称不是标准运算符名称之一,则调用GenerateDocForStandardMethod.我找不到操作员方法名称的详尽列表,但如果您确实需要,我可能会提供完整的列表.
编辑:这是一个可重载运算符的方法名称列表(取自http://forums.devx.com/showthread.php?55322-Operator-Overloading ..... C-can-do-it .... &p = 208952#post208952):
op_Implicit
op_Explicit
op_Addition
op_Subtraction
op_Multiply
op_Division
op_Modulus
op_ExclusiveOr
op_BitwiseAnd
op_BitwiseOr
op_LogicalAnd
op_LogicalOr
op_Assign
op_LeftShift
op_RightShift
op_SignedRightShift
op_UnsignedRightShift
op_Equality
op_GreaterThan
op_LessThan
op_Inequality
op_GreaterThanOrEqual
op_LessThanOrEqual
op_MultiplicationAssignment
op_SubtractionAssignment
op_ExclusiveOrAssignment
op_LeftShiftAssignment
op_ModulusAssignment
op_AdditionAssignment
op_BitwiseAndAssignment
op_BitwiseOrAssignment
op_Comma
op_DivisionAssignment
op_Decrement
op_Increment
op_UnaryNegation
op_UnaryPlus
op_OnesComplement
| 归档时间: |
|
| 查看次数: |
4687 次 |
| 最近记录: |