LINUX.ORG.RU

Перегрузка системных методов в C#

 ,


0

1

Волей судьбы пишу на C#, и встал такой вопрос: можно ли в нем переопределить, к примеру, метод System.Math.Pow, чтобы он принимал аргументы моего типа и как это сделать, имея при этом доступ к приватным полям значений моего типа?

★★★★★
Ответ на: комментарий от encyrtid

Каким образом? Мне нужно, чтобы пользователь моей либы подключил ее себе в «решение» и мог пользоваться системными функциями для математики, передавая им значения моих типов. Это возможно?

buddhist ★★★★★
() автор топика
Ответ на: комментарий от buddhist

Если я правильно понял, то что-то типа такого:

public class MyDouble
{
    public double ToDouble()
    {
        return 0.0;
    }
}

public class MyMath
{
    public static double Pow(MyDouble n1, MyDouble n2)
    {
        return Math.Pow(n1.ToDouble(), n1.ToDouble());
    }
}

encyrtid ★★★★★
()

В C# вроде как есть экстеншены для классов. Напиши расширение для класса Math со своим методом Pow, который принимает нужные тебе аргументы.

mono ★★★★★
()

можно ли в нем переопределить, к примеру, метод System.Math.Pow

Math нельзя, потому, что это статический класс.

имея при этом доступ к приватным полям значений моего типа?

Через язык - никак, разве что через рефлексию.

nikolnik ★★★
()
Ответ на: комментарий от buddhist

А, тебе ж Math нужен.
Вообще ты что-то странное хочешь, почему нужна перегрузка именно Math методов?
Не проще написать свою реализацию?

ritsufag ★★★★★
()
Ответ на: комментарий от ritsufag

Хочется, чтобы пользователь взял, подключил мою либу и пользовался не MyCoolModule.Pow, а обычным Math.Pow

buddhist ★★★★★
() автор топика
Ответ на: комментарий от buddhist

и пользовался не MyCoolModule.Pow, а обычным Math.Pow

В чем проблема. Создаешь статический класс Math с нужными методами, опакечиваешь если нужно. Всё.
А то что ты хочешь это сорт оф Monkey patch.

ritsufag ★★★★★
()
Ответ на: комментарий от buddhist

Создай свой класс в отдельном пространстве имен, как все нормальные люди.

nikolnik ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.