お世話になります。
Aというクラスのフィールド変数(値型)を
Bというクラスで参照を保持しておきたい場合は、
どのような方法がありますでしょうか?
※用途は色々あるので、用途は今回は考えず、
単に別のクラスのフィールド(値型)の参照を保持する方法でご返信頂けると幸いです。
C/C++であれば、ポインタで渡し、
そのクラスのメンバー変数がそのポインタを保持していれば良いのですが、
C#の場合ですと、ref等で値型を参照渡しできますが、
それを保持しておくにはどうすれば良いのかが分からず、質問させて頂きました。
以上、宜しくお願い申し上げます。
「用途は色々ある」の一例を教えて下さい。
フィールドを直接公開して別クラスからアクセス可能にしようとすること自体がどうなの?という疑問があります。
クラスAのインスタンス自体をクラスBが参照すれば問題は解決すると思いますが。
やってやれないことはないですが
「C#でClass層にある変数へポインタ参照」
https://teratail.com/questions/261876
C# らしくないので、こんなことするなら C/C++ で書けばいいのでは?
C#を使う環境なので、C/C++で書くことはできません。
また、今回はフィールドを保持するか、それともそのクラスを保持するか(結局はこの方法で対応します。ベストアンサーに対する方で返信しておりますのでご参照ください)の違いですので、C#らしくないというのは少し問題の意図とは違う気がします。
> gentaroさん
個人的な活動でのプログラムですが、関わっているプログラマーが他にもいる為、
パッと思いつく事例がいくつかあるのですが共有できない形となります(それ以外で一例がパッと思いつけば良かったのですが・・・)
フィールドを直接公開しの部分ですが、値型ではないモノを公開すれば全て同じような事になりますので、「別クラスからアクセス可能にしようとすること自体はどうなの?」というのは問題ないと思います。
https://ufcpp.net/study/csharp/oo_conceal.html
> メンバー変数はクラス外部から直接アクセス出来ないようにして、オブジェクトの状態の変更はすべてメソッドを通して行うべきだということです
メンバー変数というのはフィールドのことです。特別な理由がない限り、フィールドを直接公開するのは避け、プロパティを公開します。
フィールドはprivateでアクセッサ(プロパティ含む)を通してというのは同じ意見です。
ただし、アクセッサを通して参照型を返した場合は、結局のところ返答させて頂いた事になるかと思います。
どの返答のことかわかりませんし、参照型が何を指しているかもわかりませんが、公開されていないフィールドを外からアクセスするのは無理です。
> フィールドを直接公開しの部分ですが、値型ではないモノを公開すれば全て同じような事になりますので、「別クラスからアクセス可能にしようとすること自体はどうなの?」というのは問題ないと思います。
> フィールドはprivateでアクセッサ(プロパティ含む)を通してというのは同じ意見です。
ただし、アクセッサを通して参照型を返した場合は、結局のところ返答させて頂いた事になるかと思います。
要するにカプセル化という考え方を否定するということですね。
なんか宗教が違うみたいなので、これ以上突っ込まないようにします。
回答1件
あなたの回答
tips
プレビュー