- ベストアンサー
VB.NETとC#の違いについて
- VB.NETでは、プロパティにメソッドをくっつけたようなクラスを作成することができますが、C#では同じようには書けません。
- VB.NETの場合、『param.Item("AAA") = "111"』のような記述ができるParamクラスを作成していますが、C#ではこのような記述はエラーになります。
- VB.NETとC#では、プロパティやメソッドの書き方が異なるため、同じようなクラスを作成する場合でも、やり方が異なることがあります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Param param = new Param(); param.Item["AAA"] = "111"; という形にできるかどうかという観点だけで考察すると public class Param { public Items Item = new Items(); public class Items { private Hashtable _Hash = new Hashtable(); public String this[object Key] { get { return _Hash[Key] as String;} set { _Hash[Key] = value; } } } } クラス内にクラスを作り、インデクサで記述すればご希望の書式で記述する ことができます。
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
> param.Item["BBB"] = "222;" は出来ないみたいですよ [](インデクサ)の定義の内部に Itemが含まれているようなので public Object Item[ Object key] { get { return _hash[key]; } set { _hash[key] = value; } } といった具合で public Object this[ Object key]と同時に定義するエラーになるようです プロパティとして定義すると 引数 keyを受け付けないようですし Itemをコレクションとして定義するの方向にしないといけないように思います そうなると Itemに対してのsetアクセサでは無く Addメソッドを使うためのラッパーが必要になりそうです VBとC#で 文法を同じに出来ない部分のように思いますよ
お礼
ありがとうございます。 VBに出来てC#で出来ないはずがないと思い 色々試してみましたがダメでした。 param["BBB"] = "222"; でもいいと言えばいいのでthisを使ったやり方で対応します。
- redfox63
- ベストアンサー率71% (1325/1856)
private Hashtable _hash = new Hashtable(); public Object this[ Object key] { get { return _hash[key]; } set { _hash[key] = value; } } といった具合だろうと思いますよ
お礼
ありがとうございます。 その場合こうなりますね。 param["AAA"] = "111"; こっちの使い方は出来ないでしょうか? param.Item["BBB"] = "222;"
お礼
ありがとうございます。 クラス内にクラスを作るって発想はなかったです。 勉強不足でした。