をこの:メソッドに起こるよう
CheckPasswords(out notUsed, out notUsed);
は(メソッドに内容notUsed
のを渡しません。それはout
パラメータを使用しなかった)この方法にはの〜notUsed
が渡されます。実際には同じ参照が2回あります。あなたが言うように、この時点でnotUsed
には参照自体はまだ含まれていませんが、それは問題ではありません - コンテンツで何もしていない、実際にはout
として渡すので気にしません。そして、この:user1
がstring
パラメータではありませんので、
user1 = "A";
は特別な何かをする - それはout string
パラメータです。ローカルのuser1
に値を割り当てるのではなく、user1
が指している値(この場合はnotUsed
)に値を割り当てます。この時点で、notUsed
は"A"
への参照を保持します。そして、この:
user2 = "B";
は同じことを行いますが、他のパラメータを使用して - それはnotUsed
から"B"
への参照を割り当てます。そして、この2行:
Console.WriteLine("user1: " + user1);
Console.WriteLine("user2: " + user2);
はそれにuser1
とuser2
ポイントの両方から、任意のローカル変数の内容が、notUsed
の値を取得していません。もちろん、"B"
を2回取得します。
それは、このコードよりも何より衝撃的ではありません:これは二回B
を印刷している場合は、おそらく驚かない
class User {
public string Name { get; set; }
}
void NotMagic(User user1, User user2) {
user1.Name = "A";
user2.Name = "B";
Console.WriteLine("user1.Name = " + user1.Name);
Console.WriteLine("user2.Name = " + user2.Name);
}
void Main() {
User user = new User();
NotMagic(user, user);
}
。 NotMagic
に2つの異なるパラメータがあるということは、両方が同じものを指すことができないということを意味しません。 out
およびref
のパラメータと同じですが、構文によって余分な間接参照が隠される点が異なります。
どういう意味ですか?リンクされていることをどのように知っていますか? – mason
user1とuser2の同じ参照をそのメソッドに渡すと、それは正常です。 –
@TobiasTheelここに構造体はありません。 – itsme86