Mai mult
Apelarea constructor de bază în C#
Dacă am moștenit de la o clasă de bază și doresc să treacă ceva de la constructorul a moștenit clasa a constructorului din clasa de baza, cum fac asta?
De exemplu,
Dacă am moștenit de Excepție clasă vreau să fac ceva de genul asta:
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo)
{
//This is where it's all falling apart
base(message);
}
}
Practic, ceea ce vreau este de a fi capabil de a trece string mesaj de la baza Excepție de clasă.
1388
10
Modifica constructor la următoarea, astfel încât se numește clasă de bază constructor în mod corespunzător:
Rețineți că un constructor nu este ceva la care poți apela oricând într-o metodă. Ca's motivul pentru care ai're obtinerea erori în apel în constructorul corpului.
Rețineți că puteți utiliza static metode cadrul apelului de constructor de bază.
Dacă aveți nevoie pentru a apela constructor de bază, dar nu imediat, pentru că noi (derivate) clasa are nevoie pentru a face unele de manipulare a datelor, cea mai bună soluție este de a recurge la metoda fabrică. Ceea ce trebuie să faceți este de a marca privat derivate constructor, apoi face o metodă statică din clasa ta, care va face toate lucrurile necesare și mai târziu apela constructorul și a reveni la obiect.
Este adevărat folosi "de bază" (ceva) pentru a apela clasa de baza constructorul, dar în caz de supraîncărcare a folosi "această" cheie
Puteți trece interior excepție de la unul dintre constructori.
Din Cadru liniile Directoare de Proiectare și FxCop reguli.:
1. Personalizat Excepție ar trebui să aibă un nume care se termină cu Excepția
2. Excepție ar trebui să fie publice
3. CA1032: Excepție ar trebui să implementeaza standardul constructori.
[Serializable()] public class MyException : Excepție { public MyException() { // Adauga orice tip specific de logică, și de aprovizionare mesajul implicit. }
public MyException(string mesaj): base(mesaj) { // Adauga orice tip-specifice logica. } public MyException(string mesaj, Excepție innerException): de bază (mesaj, innerException) { // Adauga orice tip-specifice logica pentru interior excepții. } protejate MyException(SerializationInfo info, StreamingContext context) : baza(informatii, context) { // Pune în aplicare specifice tipului de serialization constructor logica. } }
sau
Puteți face, de asemenea, condiționată verifica cu parametrii în constructor, care permite o oarecare flexibilitate.
sau
Ca pe unele de celelalte răspunsuri enumerate aici, puteți trece parametrii în baza constructorul clasei. Este recomandat pentru a apela dumneavoastră de bază constructorul clasei la începutul constructor pentru a moștenit de clasă.
Am act de faptul că, în exemplul tău niciodată nu a făcut uz de
extraInfo
parametru, deci am presupus că ai vrea să înlănțui peextraInfo
parametru șir laMesajul
proprietate de excepție (se pare că acest lucru este ignorat în răspunsul acceptat și codul în cauză).Acest lucru este pur și simplu realizat prin invocarea clasa de baza constructorul, și apoi actualizarea Mesaj de proprietate cu informatii suplimentare.