C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: インデクサ宣言とItemプロパティでエラー


(過去ログ 81 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■47828 / inTopicNo.1)  インデクサ宣言とItemプロパティでエラー
  
□投稿者/ タカミ (1回)-(2010/03/16(Tue) 10:45:13)

分類:[C#] 

C#にて、クラスを新規作成し、インデクサ宣言を追加しました。---(1)
次にプロパティを追加しました。---(2)
以下のソースです。(検証用の最低限のソースです)

namespace ItemThisTest
{
    class Class1
    {
        // (1)
        public int this[string colName]
        {
            get
            {
                return 0;
            }
        }
        
        // (2)
        string Item
        {
            get { return ""; }
        }
    }
}

ビルドすると、thisのところで以下のエラーが出ます。

「エラー CS0102: 型 'ItemThisTest.Class1' は 'Item' の定義を既に含んでいます。」

CS0102は同じスコープで同名の識別子がある場合のエラーですが、
Itemプロパティは見ての通り一つしかありません。
Itemプロパティの名前を変えればエラーは出なくなりますが、
(ITEM, itemなど)そもそもなぜItemが重複していると認識されてしまうのでしょうか?
Visual Studio 2005、2008で検証しております。


引用返信 編集キー/
■47829 / inTopicNo.2)  Re[1]: インデクサ宣言とItemプロパティでエラー
□投稿者/ なちゃ (410回)-(2010/03/16(Tue) 10:58:31)
インデクサはデフォルトでItemって名前になるんです。
IndexerNameだったかの属性で名前を変えることが出来ます。
もしくはプロパティの方の名前を変えるかですね。
引用返信 編集キー/
■47831 / inTopicNo.3)  Re[2]: インデクサ宣言とItemプロパティでエラー
□投稿者/ 囚人 (484回)-(2010/03/16(Tue) 11:07:24)
インデクサを直接サポートしていない言語からインデクサにアクセスするには
ItemThisTest i
i.get_Item(0)
という形式でアクセスする必要があります。要は Item という名前に自動変換。

どうしても、インデクサの名前を変更したければ、IndexerNameAttribute
http://msdn.microsoft.com/ja-jp/library/system.runtime.compilerservices.indexernameattribute.aspx
を使えば可能ですが、インデクサの名前を変更するのは良いとしても、Itemという名前をほかの用途で使うのは混乱すのであまりおすすめしません。

引用返信 編集キー/
■47843 / inTopicNo.4)  Re[3]: インデクサ宣言とItemプロパティでエラー
□投稿者/ タカミ (2回)-(2010/03/16(Tue) 13:37:16)
2010/03/16(Tue) 13:38:11 編集(投稿者)
2010/03/16(Tue) 13:38:02 編集(投稿者)

なちゃさん、囚人さん、ありがとうございました。

今回はプロパティ名を変更することにしました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -