4

私の知る限り、C# の文字列は参照型です。

したがって、次のコードでは、「a」は「Hi」に等しくなければなりませんが、「Hello」という値を保持しています。なんで?

string a = "Hello";
string b = a;
b = "Hi";
4

5 に答える 5

28

多くの回答は、文字列が不変であることを指摘しています。それは本当ですが、それはあなたの質問とはまったく関係ありません。

さらに重要なのは、変数に関して参照がどのように機能するかを誤解しているということです。参照は変数への参照ではありません。参照を文字列の一部と考えてください。あなたはこれから始めます:

a----------------------Hello

次に、「b = a」と言います。これは、に取り付けられている同じものに別の文字列を取り付けることaを意味します。

a----------------------Hello
                      /
b---------------------

次に、「b を Hi に付けます」と言います。

a----------------------Hello

b----------------------Hi

あなたは、参照が次のように機能すると考えています。

a----------------------Hello

それから私はそれbがの別の名前だと言いますa

a/b ----------------------Hello

次にb、 を変更すると が変更されますa。これらは同じものの 2 つの名前であるためです。

a/b ----------------------Hi

または、参照は次のように機能すると考えているかもしれません。

a----------------------Hello

b次に、それは次のことを指していると言いますa

b -------------- a ----------------------Hello

次にb、間接的に変更する を変更しますa

b -------------- a ----------------------Hi

つまり、ではなく、変数への参照を作成することを期待しています。次のように、C# でそれを行うことができます。

void M(ref int x)
{
    x = 1;
}
...
int y = 0;
M(ref y);

これは、「M への呼び出しの間、x は y の別の名前である」ことを意味します。x を変更すると y が変更されます。これらは同じ変数だからです。変数の型は参照型である必要はないことに注意してください。

于 2012-04-04T05:49:27.523 に答える
7

この行は、参照b = "Hi";する文字列を変更しますbaまだ参照し"Hello"ます。

string a = "Hello";  // Set a to reference the string "Hello"
string b = a;        // Set b to reference the same string as a
b = "Hi";            // Set b to reference the string "Hi"
于 2012-04-04T05:27:19.163 に答える
1

参照型の概念は、OOPプログラマーの間で最も紛らわしいものです。

以下のコードを実行すると、答えが表示されて驚かれることでしょう。

Bookというプロパティを使用して単純なクラスを作成し、アプリケーションのメソッドにName次のコードを記述します。Main

Book a = new Book() {Name = "book a"};
Book b = new Book() {Name = "book b"};

Book c = a; //line 3

Book a = b; //Line 4

Console.WriteLine(c.Name);

そして間違いなく、4行目から答えは「本b」であると期待するでしょう。caであり、その後abになり、 cbに等しくなると思います。

そうではありません

参照型のバルーンアナロジーでバルーンアナロジーを読んでください。

于 2012-04-04T06:09:03.037 に答える
1

参照を変更しています b. ない。参照自体はコピーされますが、オブジェクトは変更されません。したがって、b = "Hi" は "Hi" オブジェクトへの参照を b にコピーします。これは a には影響しません。

于 2012-04-04T05:28:41.643 に答える
0

いいえ!

あなたがしたことは、文字列 "Hello" への 2 つの参照 ('a'、'b') を作成することです。「b = "Hi"b」を変更して、文字列「Hi」を参照します。

「a」はこのように変わることはありません。

于 2012-04-04T05:31:10.147 に答える