Hi A while ago there were the methods __getitem__ and __setitem__ which allowed to override an indexer. I can't find these methods anymore and I also can't find a way to override an indexer.
namespace ClrModels { public class IndexerContained{ private Dictionary<string, string> _inner = new Dictionary<string, string>{ { "key1", "value1" }, { "key2", "value2" }, { "key3", "value3" }, { "key4", "value4" } }; public virtual string this[string name]{ get { return _inner[name]; } set { _inner[name] = value; } } } public class IndexerCaller{ public string CallIndexOnClass(IndexerContained klass, string name){ return klass[name]; } public string CallIndexOnInterface(IHaveAnIndexer klass, string name){ return klass[name]; } } } class MySubIndexer < ClrModels::IndexerContained; def [](name); 6; end; def Item(name); 7; end; def item(name); 8; end; def get_Item(name); 9; end; end >> cons = ClrModels::IndexerCaller.new => ClrModels.IndexerCaller >> cons.call_index_on_class(MySubIndexer.new, "key") unknown:0: warning: do not use Fixnums as Symbols => 'Fail' And a spec to go with it: require File.dirname(__FILE__) + "/../spec_helper" describe "CLR to CLR interactions" do describe "when isolating CLR classes" do describe "that have an indexer" do before do @cons = ClrModels::IndexerCaller.new @ind = Caricature::Isolation.for(ClrModels::IndexerContained) end it "should work without expectations" do @cons.call_index_on_class(@ind, "key1").should.be.nil end it "should work with an expectation" do @ind.when_receiving(:__getitem__).return("5") @cons.call_index_on_class(@ind, "key1").should.equal "5" end end end end --- Met vriendelijke groeten - Best regards - Salutations Ivan Porto Carrero Blog: http://flanders.co.nz Google Wave: portocarrero.i...@googlewave.com Twitter: http://twitter.com/casualjim Author of IronRuby in Action (http://manning.com/carrero)
_______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core