How to translate C# 'readonly' keyword into D

o3o orfeo.davia at gmail.com
Mon Feb 4 01:02:30 PST 2013


I'm a C# programmer, when I apply IoC pattern  I use "readonly" 
keyword 
(http://msdn.microsoft.com/en-us/library/acdd6hb7%28v=vs.71%29.aspx) 
in this manner:

:// C# code
:interface IFoo {
:  void Fun();
:}
:
:class Foo: IFoo {
:  void Fun() {...}
:}
:class Bar {
:  private readonly IFoo foo;
:  // inject IFoo into Bar
:  Bar(IFoo foo) {
:    // assert(foo != null);
:    this.foo = foo;
:  }
:  void Gun() {
:    // foo = new Foo(); //// ERROR: foo is readonly!
:    foo.Fun();
:  }
:}

Can someone help me to translate "readonly IFoo foo;" so that the 
dmd compiler raises an error when I write "foo = new Foo();" ?

I try:
:// D code
:interface IFoo {
:   void fun();
:}
:
:class Foo: IFoo {
:   void fun() {
:      writeln("fun...");
:   }
:}
:
:class Bar {
:   private const IFoo service;
:   this(const IFoo service) {
:      this.service = service;
:   }
:
:   void gun() {
:      service.fun();
:   }
:}
:unittest {
:  const(IFoo) s = new Foo;
:  auto bar = new Bar(s);
:  bar.gun();
:}
but the compiler complains:
Error: function main.IFoo.fun () is not callable using argument 
types () const



More information about the Digitalmars-d-learn mailing list