2015-12-05 4 views
0
namespace Test 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     A a = new A(); 
     a.MyString = "Metallica "; 
     PrintA(a); 
     Console.WriteLine(a.MyString); 

     string name = "Linkin "; 
     Print(name); 
     Console.WriteLine(name); 

     Console.ReadLine(); 
    } 

    static void PrintA(A a) 
    { 
     a.MyString = a.MyString + "Rocks"; 
     Console.WriteLine(a.MyString); 
    } 

    static void Print(string text) 
    { 
     text = text + "Park"; 
     Console.WriteLine(text); 
    } 
    } 

    class A 
    { 
    public string MyString { get; set; } 
    } 

} 

Выход:Является ли строка C# переданной по значению или переданной по ссылке?

Metallica Rocks

Metallica Rocks

Linkin Park

Linkin

Мой вопрос в том, что, если строка является ссылочным типом (т.е. класс) то почему она не изменяет значение переменной имя после метода Print() называется, как это происходит для ссылочной переменной «s член MyString.

+2

«ссылочный тип» не означает, что он будет передан по ссылке. –

+0

Не могли бы вы отменить мой ответ, который является неправильным, поэтому я могу удалить его. –

ответ

1

В .NET String является ссылочным типом. Он передается по ссылке. Тем не менее, когда вы вносите изменения в строковое значение, создается новая новая копия, оставив исходную без изменений. Вот почему он действует так, как будто он отправляется значением

+5

№ Передача по значению vs pass по ссылке и типу значений по сравнению с ссылочными типами являются совершенно разными темами. Они не связаны. –

+0

Этот ответ неверен. Строки являются ссылочным типом, но эта ссылка передается по значению. Он также не копируется при внесении изменений, но вместо этого создается и назначается новая строка для ссылки; потому что ссылка была передана по значению, изменение не отражается на вызывающем абоненте. –

 Смежные вопросы

  • Нет связанных вопросов^_^