Перегрузка оператора VB.Net Power (^) из C#

Я пишу класс C#, который доступен для VB.Net. Я хотел бы перегрузить vb.net ^ оператор, чтобы я мог написать:

Dim c as MyClass
Set c = New ...
Dim d as MyClass
Set d = c^2

В C# ^ оператор является xor оператор и оператор власти не существует. Есть ли способ, которым я могу это сделать?

2 ответа

Решение

РЕДАКТИРОВАТЬ

Оказывается, есть SpecialNameAttribute это позволяет вам объявлять "специальные" функции в C#, которые позволят вам (помимо прочего) перегрузить оператор питания VB:

public class ExponentClass
{
    public double Value { get; set; }

    [System.Runtime.CompilerServices.SpecialName]
    public static ExponentClass op_Exponent(ExponentClass o1, ExponentClass o2)
    {
        return new ExponentClass { Value = Math.Pow(o1.Value, o2.Value) };
    }
}

op_Exponent функция в классе выше переводится VB в ^ энергетический оператор.

Интересно, что в документации говорится, что атрибут в настоящее время не используется.NET Framework...

--ОРИГИНАЛЬНЫЙ ОТВЕТ -

№ сила (^) оператор компилируется как Math.Pow() так что в C# нет возможности "перегрузить" его.

Из LinqPad:

Sub Main
    Dim i as Integer
    Dim j as Integer
    j = Integer.Parse("6")
    i = (5^j)
    i.Dump()
End Sub

IL:

IL_0001:  ldstr       "6"
IL_0006:  call        System.Int32.Parse
IL_000B:  stloc.1     
IL_000C:  ldc.r8      00 00 00 00 00 00 14 40 
IL_0015:  ldloc.1     
IL_0016:  conv.r8     
IL_0017:  call        System.Math.Pow
IL_001C:  call        System.Math.Round
IL_0021:  conv.ovf.i4 
IL_0022:  stloc.0     
IL_0023:  ldloc.0     
IL_0024:  call        LINQPad.Extensions.Dump

Экспериментально выясняется, что перегрузка операторов - всего лишь синтаксический сахар, и его лучше избегать, если вам нужно работать на нескольких языках. Например, ^ оператор VB.NET переводится на op_Exponent функция, так что это то, что вам доступно из C#.

Почему в C# нет оператора питания?

Вы можете использовать собственный способ.NET, чтобы не полагаться на операторы:

Math.Pow(x, y);

Также для y=2 быстрее использовать умножение (x*x).

Другие вопросы по тегам