2016-09-29 12 views
2

に通された後に変更されていないので、私は明らかにプログラミングにかなり新しいですが、これは私が取るしようとしているC#の - なぜ、この変数はメソッド

が動作しない理由を把握しようとしていますmynameという文字列を追加し、その先頭にMr.を追加します。私は単純にmyname = "Mr. " + mynameとしてそれを行うことができます知っているしかし、私は変数の値を変更するメソッドを使用する方法を理解しようとしています。だから、なぜこれは変わらないのですか?

public class Program 
    { 
     public static void Main(string[] args) 
     { 
      string myname = "harry"; 
      Console.WriteLine(myname); //output is harry 

      namechanger(myname); //this should modify harry to Mr. Harry 
      Console.WriteLine(myname); //output is still harry? 
     } 

     static string namechanger(string name) 
     { 
      name = "Mr. " + name; 
      return name; 
     } 

    } 

答えて

5

Strings are immutable、およびpassed by value。文字列を作成するたびに変更されることはありません。したがって、クラスのインスタンスとは異なり、変更するメソッドに渡すことで文字列を変更することはできません。

この場合、namechangerに変更された文字列returnがあるので、そのメソッドの結果にmynameを割り当ててください。 structインスタンスがやるように

myname = namechanger(myname); 

プリミティブ型(intfloatlong、など)のように、このように動作 - あなたがわからない、なぜ構造体の値ならそう、将来的にその探してくださいメソッドに渡すときに変更されていません。

+2

すべての型は、プリミティブ型だけでなく、このように動作します。 – aquinas

+0

おそらく賢明な意味で、 'class'と' struct'のメソッドを呼び出すと、ポインタが1つ、構造体全体が1つ異なります。 「値渡し」と「参照渡し」は、その動作の違いを区別するために使用される用語です。 – Knetic

+0

@Knetic - いいえ、それは正しくありません。 aquinasは正しいです。 – Enigmativity

関連する問題