プロが教える店舗&オフィスのセキュリティ対策術

VB.NETでは出来るのにC#で同じようにするやり方がわからなくて困っています。
VSのバージョンは2008です。

やりたいことは
『param.Item("AAA") = "111"』
このように書けるクラスを作りたいのですが、
VBで出来てC#では出来ないのでしょうか?
イメージとしてはプロパティにメソッドをくっつけたようなクラス?
C#ではこのように書くとエラーになります。
どのようにしたらいいでしょうか?
public string Item(string Key)
{
 set { _param[Key] = value; }
}

VB
Dim param As New Param()
param.Item("AAA") = "111"
----Paramクラス----
Imports System.Text
Public Class Param
Private _Hash As New Hashtable
Default Public Property Item(ByVal Key As String) As String
Get
Return _Hash(Key)
End Get
Set(ByVal value As String)
_Hash(Key) = value
End Set
End Property
End Class
---------

A 回答 (3件)

private Hashtable _hash = new Hashtable();


public Object this[ Object key]
{
  get { return _hash[key]; }
  set { _hash[key] = value; }
}
といった具合だろうと思いますよ
    • good
    • 0
この回答へのお礼

ありがとうございます。

その場合こうなりますね。
param["AAA"] = "111";

こっちの使い方は出来ないでしょうか?
param.Item["BBB"] = "222;"

お礼日時:2010/01/18 21:57

> 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#で 文法を同じに出来ない部分のように思いますよ
    • good
    • 0
この回答へのお礼

ありがとうございます。
VBに出来てC#で出来ないはずがないと思い
色々試してみましたがダメでした。
param["BBB"] = "222";
でもいいと言えばいいのでthisを使ったやり方で対応します。

お礼日時:2010/01/20 23:57

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; }
}
}
}

クラス内にクラスを作り、インデクサで記述すればご希望の書式で記述する
ことができます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

クラス内にクラスを作るって発想はなかったです。
勉強不足でした。

お礼日時:2010/05/29 10:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!