Sco*_*ker 9 c# operator-overloading
G'Day Mates -
重载字符串运算符<,>,<=和> =的正确方法(不包括是否可取的参数)是什么?
我已经尝试了五种方式到星期天,我得到了各种错误 - 我最好的镜头是宣布一个部分类并从那里超载,但它不会因某些原因而起作用.
namespace System
{
   public partial class String
   {
       public static Boolean operator <(String a, String b)
       {
           return a.CompareTo(b) < 0;
       }
       public static Boolean operator >(String a, String b)
       {
           return a.CompareTo(b) > 0;
       }
   }
}
Ran*_*pho 18
String是一个密封的类.你不能继承它,如果没有String的原始源,你就无法编译它的部分类.即使您已经掌握了源(可以通过Reflector或通过Visual Studio符号下载),您仍然会遇到问题,因为它是运行时的一等公民.
你真的需要<和>作为字符串的运算符吗?如果是这样......为什么不使用扩展方法呢?
public static bool IsLessThan(this string a, string b) 
{ 
    return a.CompareTo(b) < 0; 
} 
public static bool IsGreaterThan(this string a, string b) 
{ 
    return a.CompareTo(b) > 0; 
}
// elsewhere...
foo.IsLessThan(bar); // equivalent to foo < bar
Eri*_*ert 16
无法用您自己的内容替换编译器的任何内置行为.您无法覆盖现有的内置运算符以进行比较,转换,算术等.这是设计的; 它是这样的,有人可以读取你的代码,并知道这int x = M(); int y = x + 2;是整数运算,而不是格式化你的硬盘.
你能解释一下你为什么要这样做吗?也许有更好的方法来做你想要的.