开发者

C# -- Can we call the overload operator as ClassName.operator+(p1, p2)?

Given the following code, I try to implement the

p开发者_如何学Goublic static Point operator +(int x, Point p1)

by reusing the

public static Point operator +(Point p1, int x)

but it doesn't work. Is it true that we cannot do this in C#?

thank you

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Point
    {
        public int X { get; set; }
        public int Y { get; set; }

        public Point() { }
        public Point(int x, int y)
        {
            X = x;
            Y = y;
        }

        public override string ToString()
        {
            return string.Format("x: {0}, y: {1}", X, Y);
        }

        public static Point operator+(Point p1, Point p2)
        {
            return new Point(p1.X + p2.X, p1.Y + p2.Y);
        }

        public static Point operator +(Point p1, int x)
        {
            return new Point(p1.X+x, p1.Y+x);
        }

        public static Point operator +(int x, Point p1)
        {
            return Point.operator+(p1, x); // **doesn't compile** 
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            Point p1 = new Point(1, 2);
            Point p2 = new Point { X = 3, Y = 4 };

            Console.WriteLine("p1: {0}", p2);
            Console.WriteLine("p2: {0}", p1);

            Console.WriteLine("p1+p2: {0}", p1+p2);

            Console.WriteLine("p1+10: {0}", p1 + 10);
            Console.WriteLine("p1+10: {0}", 10 + p1);
            Console.ReadLine();
        }
    }
}

// updated for the compiler errors //

Error   1   Invalid expression term 'operator'  C:\temp\ConsoleApplication2\ConsoleApplication2\Program.cs  37  26  ConsoleApplication2
Error   2   Identifier expected; 'operator' is a keyword    C:\temp\ConsoleApplication2\ConsoleApplication2\Program.cs  37  26  ConsoleApplication2
Error   3   Invalid expression term ',' C:\temp\ConsoleApplication2\ConsoleApplication2\Program.cs  37  38  ConsoleApplication2
Error   4   ) expected  C:\temp\ConsoleApplication2\ConsoleApplication2\Program.cs  37  38  ConsoleApplication2
Error   5   ; expected  C:\temp\ConsoleApplication2\ConsoleApplication2\Program.cs  37  40  ConsoleApplication2
Error   6   Invalid expression term ')' C:\temp\ConsoleApplication2\ConsoleApplication2\Program.cs  37  41  ConsoleApplication2
Error   7   ; expected  C:\temp\ConsoleApplication2\ConsoleApplication2\Program.cs  37  41  ConsoleApplication2


You can certainly reuse the operator, just like this:

public static Point operator +(int x, Point p1)
{
    return p1 + x;
}

There's no syntax to explicitly call an operator as if it were a method though.


try

 public static Point operator +(int x, Point p) { return p + x; }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜