私はC#でjabber.netを使用しています。私は混乱しているので、誰かがどのようにそれをやっているのか説明できます。 I私は入力する必要が部屋を保持するための読み取り専用JIDを作成しています、それはこの関数はどのように私のreadonly変数を変更しますか?
が誤解かもしれので、C++の背景から、まだC#にはかなり新しいです:
private readonly JID messagingRoomJID;
public MyClass
{
// Reads from database but for purpose of this question
messagingRoomJID = new JID("[email protected]");
}
後、私は参加したいです
conferenceManager = new ConferenceManager();
conferenceManager.Stream = xmppClient;
// Before entering this room messagingRoomJID.Resource == null
theRoom = conferenceManager.GetRoom(messagingRoomJID);
// But now messagingRoomJID.Resource contains my username
しかし、どのようにリソースが変更されていますか?変数は読み込み専用ですが、const参照によって渡されるべきではないので、どうして更新されますか?唯一のルート要素が読み取り専用あたりであるのに対し、
theRoom = conferenceManager.GetRoom(new JID(messagingRoomJID));
すごい、たくさんの速い返答。私は今何が起こっているのか理解しています。私はそれがC++のconst参照にもっと似ていると思っていましたが、当然のことではありませんが、私は残念ですが、これがなぜそう多くの良い理由があると確信しています。それで、通常のインスタンスでオブジェクトを関数に渡すと、そのコードに影響されないという保証はありませんか? – Firedragon
@Firedragon:あなたはオブジェクトを渡さない。値で参照を渡します(参照型で、ref/outパラメータではないと仮定します)。そして、可能であれば、オブジェクトが変更可能な場合は何でもオブジェクトを変更することができます。パラメータの受け渡しの詳細については、http://pobox.com/~skeet/csharp/parameters.htmlを参照してください。基本的に、C#がC++に似ていると想定しないでください - そうではありません! :) –
それはそれのように聞こえるかもしれませんが、それは私が意味するもののようなものです。ちょうど自分自身を説明する上で最善ではない:私は参照が値によって渡されるので、それはC + +に似ていると思うが、同じconst正しさがないという点で異なる# – Firedragon