Quali sono i modi per creare una classe non istantanea? Un modo è dichiarandolo come una classe astratta. È possibile farlo rendendo il costruttore della classe privato? È una classe sigillata, non istantanea? E ci sono altri modi per farlo in C#?Quali sono i modi per dichiarare una classe che non può essere istanziata?
risposta
Contrassegnare una classe come astratta o statica (si escludono a vicenda) sono gli unici due modi. Contrassegnare tutti i costruttori come privati non rende la classe non è realizzabile poiché la classe può ancora costruirsi da sé, e altri potrebbero essere in grado di farlo attraverso la riflessione.
Come risposta da altre classi astratte e statiche non possono essere istanziate tuttavia una classe con costruttore privato può essere utilizzando una funzione membro pubblico. Questo è il modo in cui il modello singleton funziona
Solo static
sembra una soluzione completa qui perché la classe abstract
può ancora essere istanziata quando l'istanza di classe che ne eredita viene istanziata. Si consideri lo scenario:
abstract class A { }
class B : A { }
somewhere in code :
B instance = new B(); // this creates instance of class A as well
P.S. In un primo momento però che potrebbe essere abstract sealed
soluzione per questo problema pure ma non ha molto senso usare una tale costruzione quindi neppure non compila:
Error 1 'A': an abstract class cannot be sealed or static D:\Projects\TEST\Testapp\Program.cs 15 27 ITT.Domain
Sono d'accordo. In .Net è possibile ottenere un'istanza Stream. Ovviamente quella sarà sempre un'istanza di una sottoclasse di Stream. Ma per il codice sia all'interno della classe Stream che all'esterno della classe Stream, l'istanza è ancora un'istanza. –
Cos'è l'abstract sealed? Qualcuno può spiegare di cosa si tratta? – kakkarot
bello menzionarlo ma il sigillo astratto non è possibile. –
classi interne sono visibili solo all'interno del tuo assieme e quindi non può essere istanziato al di fuori di questo assembly.
Ma per quanto ne so, è comunque possibile creare un'istanza tramite riflessione. è possibile disabilitare riflessione tramite ReflectionPermission Class
Come accennato in precedenza si poteva dichiararlo come astratto o aggiungere un metodo astratto.
Se si desidera dichiarare un contratto, è possibile utilizzare un'interfaccia, ma questa non è affatto una classe.
sigillato significa che non è possibile ereditare questa classe
Singleton classi possono essere create solo una volta per ogni applicazione singleton
vedere sealed (C# reference)
- 1. Quali sono i modi per modificare una funzione in R?
- 2. Modi moderni per dichiarare una classe in php
- 3. android.app.Application non può essere istanziata a causa di NullPointerException
- 4. Quali sono i modi per fare in modo che un collegamento html apra una cartella
- 5. Quali sono i diversi modi per sostituire un cursore?
- 6. Quali sono i modi migliori per bloccare le app Android?
- 7. Istanziata classe astratta Java?
- 8. Quali sono i vari modi con cui il "questo" può sfuggire in Java?
- 9. Esiste qualcosa come una classe che può essere implementata?
- 10. Due modi per dichiarare metodi in Javascript
- 11. Quali sono tutti i modi per allocare la memoria in C e in che modo differiscono?
- 12. classe dinamica istanziata
- 13. Quali sono i buoni modi per testare una pagina di accesso?
- 14. Metodo preferito per dichiarare i metodi in una classe
- 15. Quali sono i modi più idiomatici per combinare i tensori nella torcia?
- 16. Quali sono i modi migliori per automatizzare una sessione di debugging GDB?
- 17. Che cosa è/sono i modi di Scala per implementare questa classe "byte [] in Hex" Java
- 18. Il vincolo non può essere una classe speciale 'System.Object'
- 19. Quali sono i modi per generare MSIL dal codice non gestito
- 20. Quali sono i modi alternativi per trovare next(). Next() in jquery
- 21. Quali membri non sono ereditati in una classe figlia?
- 22. Quali sono i modi migliori per utilizzare decimali e datetime con i buffer del protocollo?
- 23. Quali sono i modi per inserire e recuperare i dati BLOB dal database Oracle utilizzando SQL?
- 24. Quali sono i modi per passare i parametri dal controller dopo il reindirizzamento in spring mvc?
- 25. Quali sono i modi per ottenere storage persistente e condivisibile solo in html e javascript?
- 26. Quali sono i modi alternativi per modellare M: M relazioni in Cassandra?
- 27. Quali sono i modi possibili per autenticare l'utente quando viene utilizzata la connessione WebSocket?
- 28. Quali sono i modi migliori per proteggere il motore di espressione?
- 29. Quali sono alcuni modi per identificare un utente che ha effettuato l'accesso sul Web?
- 30. Una classe interna di una classe template può essere una classe non template?
cosa vuoi fare con la classe? – Jay
Risposta = Classe statica – MajkeloDev
Classe astratta, classe statica non possono essere istanziati – Dragon