- PR -

C#でデータを const にする方法は?

1
投稿者投稿内容
がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2005-08-12 08:29
C++では、ポインタが指すデータを const にすることで、クラスへの参照は許可するけど内容の変更は禁ずることが出来ました。
char * const pMyClass = "Whatever";

これと同じことを C# でするにはどうすればよいのでしょうか?

データを詰め込んだクラスを実行結果として渡して読み出してもらうのですが、書き込みを禁じたいのです。ラッパークラスぐらいしかアイデアが無いのですが、なにかよい方法は無いでしょうか?
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-08-12 09:34
いや、普通にConstキーワード使うだけですけど・・・?
書き方がわからないのであればこちらをどうぞ。MSDN

[ メッセージ編集済み 編集者: でっち6号 編集日時 2005-08-12 09:37 ]
※参照先を分りやすい方に変更

※参照先がVBになってたので再修正。何やってんだ俺orz


[ メッセージ編集済み 編集者: でっち6号 編集日時 2005-08-12 10:14 ]
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-08-12 09:49
スミマセンよく読んでませんでした。
クラス内では内容の書換ができなければならないんですよね。

その時は、Propertyを使います。
MSDN

[ メッセージ編集済み 編集者: でっち6号 編集日時 2005-08-12 10:02 ]

[ メッセージ編集済み 編集者: でっち6号 編集日時 2005-08-12 10:11 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-12 10:07
引用:

クラス内では内容の書換ができなければならないんですよね。


readonly な static なフィールドでも良いですよね。
たいていが、コンストラクタで設定しますから。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2005-08-13 01:36
誠にすみません、質問の仕方(説明の仕方)非常に悪かったです。仕切り直させてください。

.NET Framework の SortedList クラスを使ってデータ受け渡しをしようとしています。自分のコードで項目を Add していき、クライエントに渡して読み出してもらおうと考えています。
このとき、クライエントに読み出しは許しても書き込みを許さないようにする良い方法は無いでしょうか?

まだ.NET初心者ですが、property, const, static, readonly といった概念は一通り理解しております。(質問の仕方はまだまだですが)
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-08-13 02:13
SortedListそのままでは不可能です。
適切なラッパクラスを使用するのが手っ取り早いでしょう。


と書いてから、もう一つ手段があったのに気付きました。
Clone()を返すようにすれば、変更しても元のリストには反映されませんね。
コレクション内の参照型オブジェクトの問題はどこまでもつきまといますが。

[ メッセージ編集済み 編集者: Hongliang 編集日時 2005-08-13 02:49 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-08-14 16:30
はじめまして。

この質問を見たとき、

====================================================================
class MyClass
{
public:
int A;
};

void Func1(const MyClass* pMyClass)
{
// pMyClass->A = 10; // これが無理。
}

void Func2(MyClass* const pMyClass)
{
// pMyClass = new MyClass(); // これが無理。
}
====================================================================

と上記どちらかの方法で使用したい、ということかと思いました。
質問内容からして、Func1 の方法でしょうか。

私も最初 .NET(C#) を勉強しているときに、上記の書き方をどうするのか疑問に思いました。
結論は、「できない」だったと思います。
意味が違ってたらすみません。

がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2005-08-16 02:44
Hongliangさん、囚人さん、ありがとうございました。

まさに囚人さんのおっしゃったFunc1をやりたかったのです。説明がまずくてすみません。しかし、出来ないんですね…。少々びっくりです。

ラッパークラスを作ってしまったのですが、HonliangさんのClone()の方が手軽な感じがしますね。確かに参照型があるときには使えませんが、なかなかいい方法だと思います。この方法が使えるところが他にもあるので、使わせていただきます。
1

スキルアップ/キャリアアップ(JOB@IT)