Вот соглашение. У меня есть программа, которая загрузит данный блок, синтаксический анализ через все Типы и их участников и скомпилирует TreeView (очень похожий на старый сайт MSDN) и затем создаст страницы HTML для каждого узла в TreeView. Это в основном берет данный блок и позволяет пользователю создавать их собственную подобную MSDN библиотеку для него в целях документации.
Вот проблема, с которой я столкнулся: каждый раз, когда перегрузка оператора является encounted в определенном классе, отражательные возвраты что как "MethodInfo" с набором имени к чему-то как "op_Assign" или "op_Equality". Я хочу смочь получить их и перечислить их правильно, но я ничего не могу найти в объекте MethodInfo, который возвращается, чтобы точно определить, что я смотрю на оператор.
Я определенно не хочу просто получать все, что запускается с "op _", так как это будет несомненно (в какой-то момент) забирать метод, он, как не предполагается. Я знаю, что другие методы и свойства, которые являются "особыми случаями" как этот, имеют набор свойств "IsSpecialName", но appearantly это не имеет место с операторами.
Я обыскивал 'сеть и разрушал мой мозг к двум дням, пытаясь понять этого, таким образом, любая справка будет значительно цениться.
Соглашение об именах 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
}
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
Перегрузки операторов действительно получают флаг IsSpecialName, установленный в true. Если же вы реализуете методы, явно дав им имя, например op_*, то флаг устанавливается в false.