はじめてのC# – インデクサをいじってみた
2014.1.20
つくりたいものがあったので、趣味グラマーとしてC#を始めました、Niseiです。
重い方の言語はあまりガッツリやり込んだ経験が無かったので内心ワクワクしてます。
文法やらポリモーフィズムやら継承やら基本的な部分は他の言語と同じ感じでだけど、今回ちょっと新たに「インデクサ」というやつが出て来た。
なんじゃそりゃ ということでちゃんと勉強してアウトプットしてみた次第です。
インデクサ?
クラスを配列っぽく操作できる子。
この説明だけだと「ん?」ってなるけど、身近な例としては 文字列操作がある。
using System; class Hoge { public static void Main() { string foo = "bar"; Console.WriteLine( foo[2] ); } }
こんな感じで何気なく使ってる foo[2]の正体こそまさにインデクサでした。
せっかくなので独自実装()してみた
とりあえず 配列番号指定の形で文字列中の文字を char型で取り出し、文字列長を超える配列番号を指定するとかでエラー起こした場合は「*」を返すようにしてみた。
( このレベルで独自実装とか言ってたら正直アレだけども、そこは初心者ということで多めにみてやって下さい )
using System; public class Hoge { public static void main(){ StrIndexer hoge = new StrIndexer("HOGE"); char[] ch = { hoge[2], hoge[4] }; Console.WriteLine( ch[0] ); // G Console.WriteLine( ch[1] ); // * } } public class StrIndexer { private string str; public StrIndexer(string init_str) { str = init_str; } public char this[int index] { get { try { return Convert.ToChar( str.Substring(index, 1) ); } catch( Exception e ) { return '*'; } } } }
変数の命名がアレなのも大目に見てやって下さい。
Written by Nisei Kimura ( 木村 仁星 )