C # тот же метод, но разные параметры: с ref и без

1

Я итальянский парень, извините за мой плохой английский! Я хочу знать, есть ли способ использовать метод с передачей параметра по ссылке или по значению, когда захотите.

Например, если я хочу этот метод:

public mehtod (ref int a)
{
    //do some stuff
}

И этот другой метод

public method (int a)
{
    //do the same stuff of method(ref int a)
}

Есть ли способ получить тот же результат, но без создания двух разных методов с одним и тем же телом? Мне это нужно, потому что иногда мне нужны побочные эффекты при использовании "метода", иногда я хочу, чтобы он не был изменен!

Спасибо огромное!

  • 1
    Если методы имеют одинаковое тело, вы не должны использовать тот факт, что a является параметром ref , так зачем вообще включать эту версию?
  • 1
    @Andrew Андрей, это не совсем так; Вы всегда можете изменить значение параметра - интересный вопрос: видит ли вызывающее изменение? Это не влияет на тело метода
Показать ещё 1 комментарий
Теги:
methods
pass-by-value
pass-by-reference

4 ответа

2
Лучший ответ

Вы можете просто вызвать первый метод из второго:

public void method (ref int a)
{
    //do some stuff
}

public void method(int a)
{
    method(ref a);  //do the same stuff of method(ref int a)
}
  • 0
    Спасибо за ваш ответ, я подумал о том же решении через 3 секунды после того, как задал этот вопрос (но я задал этот вопрос через 15 минут, думая о том, как его решить)
  • 0
    Примечание: это может плохо работать с некоторыми языками, которые не любят перегрузки только на ref - VB, IIRC
1

Если тип возврата void, вы можете изменить его, чтобы вернуть измененное значение, а не использовать ref. Затем вызывающий может игнорировать возвращаемое значение или использовать возвращаемое значение, поскольку они выбирают:

int Method(int foo) {
   // ...
   foo = ...
   // ...
   return foo;
}

С:

Method(a);

Vs

a = Method(a);
0
   static void callingMethod()
    {
        int a = 0;
        method(a); // original a is not modified

        // or

        method(ref a); // a is modified
    }

    static void method(int a)
    {
        method(ref a);
    }

    static void method(ref int a)
    {
        // do stuff
    }
0

Я не уверен, почему вы хотите это сделать. Но есть один способ, которым вы можете

  1. Добавьте еще один параметр Boolean flag для изменения или отсутствия следующего

public mehtod (ref int a, bool)

то внутри него, если измененный передан false, тогда внутри объявить новую переменную и присвоить только значение и использовать его как int b = a; и использовать b для обработки в конце на основе флага, вы обновляете переменную ref или оставляете ее

Ещё вопросы

Сообщество Overcoder
Наверх
Меню