Как передать ссылки в качестве аргументов в методе в C #

Как вы можете передавать ссылки в C #?

 RichardOD17 июн. 2009 г., 17:02
Вы имеете в виду параметры командной строки - посмотрите в метод Main. Или вы имеете в виду передать по ссылке? Основной метод-msdn.microsoft.com/en-us/library/ms228506.aspx Передача параметровmsdn.microsoft.com/en-us/library/0f66670z.aspx

Ответы на вопрос(7)

используя этот синтаксис.

public void MyMethod(ref string myString)
{

}

Затем вам нужно будет поставить ref перед значением при его передаче.

 17 июн. 2009 г., 17:55
Да, очень хороший момент.
 17 июн. 2009 г., 17:03
Стоит упомянуть, что это [обычно] необязательно для прохождения объектов, только для приматов.

статья о передаче параметров в C # ответит на все, что вы действительно хотели спросить.

В частности, необходимо различать передачу ссылкиby valueи передача аргументаby reference, Если вы сомневаетесь в типах значений и ссылочных типах, вы также можете посмотреть намоя статья на эту тему.

string companyName = "New Company";
GetEmail(ref companyName);

Код метода:

private void GetEmail(ref string companyName)
{

}
Решение Вопроса
private void functionName (ref Type variableName)
{

}

Позвонить

functionName(ref variable);
 17 июн. 2009 г., 17:01
и обязательно используйте ключевое слово ref при вызове метода SomeMethod (ref variableName);
 17 июн. 2009 г., 17:02
хорошая точка зрения. Я добавлю это

Вот.

В C # типы значений (такие как int, double, byte и struct) передаются по значению по умолчанию. Это означает, что метод получения имеет новый экземпляр типа. Если в метод передается int со значением 1, а метод изменяет его на 2, это изменение отражается только внутри метода, а int вызывающего местоположения по-прежнему равен 1. Если, однако, добавлено ключевое слово ref, затем изменения, внесенные в это целое число, отражаются обратно в место вызова.

Все классы в C # являются ссылочными типами. Это означает, что по умолчанию ссылки передаются по значению. Это важная часть. Это означает, что изменения, внесенные в этот экземпляр объекта, отражаются обратно в вызывающее местоположение, потому что это тот же объект. Однако если способ изменяет ссылку на другой объект, это изменение не отражается. В случае, если вы хотите, чтобы эти изменения были отражены обратно, вам нужно будет использовать ключевое слово ref в параметре.

    public static void Main()
    {
        int i = 1;
        Method1(i); //i here is still 1
        Method2(ref i); //i is now 2


        SimpleObj obj = new SimpleObj();
        obj.Value = 1;

        Method3(obj); //obj.Value now 2
        Method4(obj); // obj.Value still 2
        Method5(ref obj); //obj.Value now 5
    }

    private static void Method5(ref SimpleObj obj)
    {
        obj = new SimpleObj();
        obj.Value = 5;
    }

    private static void Method4(SimpleObj obj)
    {
        obj = new SimpleObj();
        obj.Value = 5;
    }

    private static void Method3(SimpleObj obj)
    {
        obj.Value++;
    }

    private static void Method2(ref int i)
    {
        i++;
    }

    private static void Method1(int i)
    {
        i++;
    }

    public class SimpleObj
    {
        public int Value { get; set; }
    }

ref Ключевое слово описано в разделе 10.6.1.2 спецификации C # 3.0.Вот это документация MSDN

но я хотел бы отметить, что в C # объекты по умолчанию передаются по ссылке. Это означает, что если у вас есть объект, а затем вы передаете этот объект методу, который вносит изменения в этот объект, эти изменения также будут влиять на объект в вашем вызывающем коде, поскольку они оба ссылаются на один и тот же объект.

 17 июн. 2009 г., 17:09
& quot; в C # объекты передаются по ссылке по умолчанию & quot; : это не так ... они передаются по значению, если вы не укажете 'ref' apos; модификатор. Я думаю, что вы путаете разницу между ссылочными типами и типами значений, а также разницу между передачей параметров по ссылке или значению. Когда вы передаете ссылочный тип в качестве параметра по значению, вы передаете ссылку по значению; вызываемая функция не может изменить эту ссылку, но она может изменить указанный объект
 17 июн. 2009 г., 17:16
Я нахожу довольно забавным, когда люди меняют состояние объекта, который не был передан по ссылке. Действительно делает для чистого и очевидного кода.
 17 июн. 2009 г., 17:37
@Thomas .. Вы просто придирчивы ... примитивные типы передаются по значению, объекты передаются по ссылке. Да, ссылка на сам объект передается по значению, но сам объект не копируется, а ссылка на него пересылается. Вот почему я говорю, что объекты передаются по ссылке.

Ваш ответ на вопрос