Impedisci l’utilizzo del costruttore predefinito

C’è un modo per impedire l’utilizzo del costruttore predefinito?

Tutto quello che posso pensare è lanciare un’eccezione, ma vorrei qualcosa che causasse un errore di compilazione.

  • Se tutto nella class è statico, considera di renderlo una class statica. In questo modo, non avrai affatto un costruttore.
  • Se si desidera un costruttore senza parametri ma non si desidera che sia pubblico, dichiararlo esplicitamente e renderlo privato (o interno, ecc.)
  • Se non si desidera un costruttore senza parametri ma si vogliono costruttori con parametri, dichiararli semplicemente: il costruttore predefinito non verrà generato per voi

Penso che dovrebbe coprire tutte le basi …

Rendilo privato.

Così,

class SomeClass { private SomeClass() { } public SomeClass(int SomeParam) { } } 

Puoi renderlo privato:

 private MyClass() { } 

In alternativa (se non lo sapevi già) se dichiari semplicemente un costruttore con parametri, quello predefinito non viene aggiunto dal compilatore, ad es.

 private MyClass(string myParameter) { //Can't call new MyClass() anymore } 

Una cosa da dire che gli altri non hanno. Il costruttore predefinito dovrebbe essere ancora in grado di impostare i bit di implementazione predefiniti, per evitare il riutilizzo. Questo non è un problema se è privato, dato che è ancora ansible eseguire una catena su un costruttore privato. Lo rendi semplicemente non disponibile alle fonti esterne.

 private MyClass() { } public MyClass(string something) : this() { } 

Questo risolve il problema. Si noti, tuttavia, che la protezione potrebbe effettivamente essere un’implementazione preferita se la class non è sigillata.

Oltre alle altre risposte, puoi leggere il seguente testo, per maggiori informazioni sul modello Singleton e alcuni esempi. Il modello Singleton si basa sul fatto che il costruttore sia privato.

http://www.yoda.arachsys.com/csharp/singleton.html