[Mono-dev] Re: Constructor implementation obligation via interface?

Robert Jordan robertj at gmx.net
Wed May 24 10:35:03 EDT 2006


Ympostor wrote:
> Kamil Skalski escribió:
>> There is a slight problem. In C# empty constructors are added
>> automatically, so you can't define a class without empty constructor.
>> What you can do is to define a class with private empty constructor,
>> which will prevent user from instanciating it directly. I guess there
>> is not way to forbid this.
> 
> Thanks for your comment.
> 
> But sorry because I think I haven't understood you completely.
> 
> You say I can't define a class without empty constructor? That's not 
> true. When you create an empty Console application in Visual Studio, 
> there is a "class Program" that contains an static method but does not 
> have any constructor.

It has an implicit default ctor.

> If you were trying to say that all classes, at the compiler level, 
> contain an empty constructor, then ok; but what I want to do is to force 
> a class to have a public empty constructor, and, if it doesn't have it, 
> have the compiler to warn me because of the semantic requisite.
> 
> Is there a way to achieve this?

No, not directly. If you really feel like you'd need this
semantic sugar, you may provide a creator for the class:

interface ICreator
{
   Foo CreateFoo ();
}

class Foo
{
   public Foo ()
   {
   }
}

class FooCreator : ICreator
{
   public Foo CreateFoo()
   {
     return new Foo ();
   }
}

Search the Web for "C# factory pattern".

Robert




More information about the Mono-devel-list mailing list