La classe base 'object'
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 23 di 70.
In C#, ogni classe che crei eredita automaticamente da una classe speciale chiamata object. Anche quando non specifichi esplicitamente una classe base, la tua classe ha comunque object come antenato ultimo. Questo significa che ogni tipo in C# condivide un insieme comune di metodi.
La classe object fornisce diversi metodi virtuali che puoi sovrascrivere nelle tue classi:
public class Person
{
public string Name { get; set; }
// Ridefinizione del metodo di object
public override string ToString()
{
return $"Person: {Name}";
}
public override bool Equals(object obj)
{
if (obj is Person other)
return Name == other.Name;
return false;
}
public override int GetHashCode()
{
return Name?.GetHashCode() ?? 0;
}
}I tre metodi di cui più comunemente si esegue l'override sono ToString() per la rappresentazione in stringa, Equals() per confrontare gli oggetti e GetHashCode() per le raccolte basate su hash. Per impostazione predefinita, ToString() restituisce il nome del tipo e Equals() verifica l'uguaglianza per riferimento.
Poiché tutto eredita da object, puoi memorizzare qualsiasi tipo in una variabile object:
object item1 = new Person { Name = "Alice" };
object item2 = 42;
object item3 = "Hello";
Console.WriteLine(item1.ToString()); // Person: AliceQuesta classe base universale è ciò che rende possibili funzionalità come le raccolte che contengono tipi diversi, ed è il motivo per cui ogni oggetto in C# può accedere a metodi come ToString() e GetType().
Sfida
FacileCostruiamo un sistema di confronto di libri che dimostri come l'override dei metodi della classe base object fornisca ai tuoi tipi personalizzati un comportamento significativo per la rappresentazione in stringa e il controllo dell'uguaglianza.
Creerai due file per organizzare il codice:
Book.cs: definisci una classeBooknello spazio dei nomiLibrary. Il tuo libro deve avere le proprietàTitle(string) eAuthor(string), insieme a un costruttore che imposta entrambi i valori. Esegui l'override dei tre metodi chiave ereditati daobject:ToString()deve restituire"{Title} by {Author}"Equals(object obj)deve restituiretruese l'altro oggetto è unBookcon lo stessoTitleeAuthorGetHashCode()deve combinare i codici hash di entrambe le proprietà
Program.cs: nel file principale, crea due libri usando i valori di input. Visualizza ciascun libro usandoToString(), poi controlla se sono uguali e stampa il risultato. Infine, dimostra che puoi memorizzare unBookin una variabileobjecte ottenere comunque un output significativo quando chiamiToString().
Riceverai quattro input:
- Titolo del primo libro
- Autore del primo libro
- Titolo del secondo libro
- Autore del secondo libro
Stampa l'output in questo formato:
Book 1: {ToString result}
Book 2: {ToString result}
Are they equal? {True/False}
Stored as object: {ToString result of first book stored in object variable}Ad esempio, se gli input sono 1984, George Orwell, 1984 e George Orwell, l'output dovrebbe essere:
Book 1: 1984 by George Orwell
Book 2: 1984 by George Orwell
Are they equal? True
Stored as object: 1984 by George OrwellSe gli input sono 1984, George Orwell, Brave New World e Aldous Huxley, l'output dovrebbe essere:
Book 1: 1984 by George Orwell
Book 2: Brave New World by Aldous Huxley
Are they equal? False
Stored as object: 1984 by George OrwellNota come i metodi sottoposti a override conferiscano agli oggetti Book un comportamento significativo: vengono visualizzati come stringhe in modo leggibile e possono essere confrontati in base al loro contenuto, anziché solo ai riferimenti in memoria!
Provalo tu
using System;
using Library;
class Program
{
public static void Main(string[] args)
{
// Leggi i dati di input per due libri
string title1 = Console.ReadLine();
string author1 = Console.ReadLine();
string title2 = Console.ReadLine();
string author2 = Console.ReadLine();
// TODO: Crea due oggetti Book usando i valori di input
// TODO: Stampa Book 1 usando ToString()
// Formato: "Book 1: {ToString result}"
// TODO: Stampa Book 2 usando ToString()
// Formato: "Book 2: {ToString result}"
// TODO: Controlla se i libri sono uguali e stampa il risultato
// Formato: "Are they equal? {True/False}"
// TODO: Memorizza il primo libro in una variabile object e stampalo
// Formato: "Stored as object: {ToString result}"
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniNamespace e direttiveIntroduzione a classi e oggettiLa parola chiave "this"Metodi e parametriCampi e proprietàCostruttoriInizializzatori di oggettiRiepilogo - Calcolatrice semplice4Ereditarietà
Sintassi di base dell'ereditarietà (:)La parola chiave 'base'Parole chiave virtual e overrideClassi sealedLa classe base 'object'Riepilogo - Gerarchia dei dipendenti7Funzionalità avanzate
Sovraccarico degli operatoriIndicizzatori (this[])Override di ToString()Metodi di estensioneRiepilogo - Lista personalizzata10Pattern di progettazione Parte 1
Introduzione ai pattern di progettazioneSingleton thread-safePattern FactoryPattern Observer (eventi)Pattern Strategy2Proprietà e membri statici
Proprietà implementate automaticamenteProprietà di sola lettura e di sola scritturaCampi e metodi staticiClassi staticheMembri con corpo di espressione5Polimorfismo e interfacce
Polimorfismo a compile time e runtimeInterfaccia o classe astrattaInterfacce multipleInterfacce espliciteUpcasting e downcastingRipasso: calcolatore di forme8Concetti avanzati di programmazione a oggetti
Composizione invece dell'ereditarietàTipi generici (classi e metodi)Delegati ed eventiAttributi e reflectionIDisposable e istruzione usingNozioni di base sull'iniezione delle dipendenze11Pattern di progettazione, parte 2
Pattern del ComandoPattern dell’AdattatorePattern del DecoratorePattern Template MethodPattern dello StatoPattern Composito3Architettura delle classi
Dati di istanza vs staticiParole chiave 'readonly' e 'const'Campi di supportoRiepilogo - Gestore di conti bancari6Incapsulamento
Modificatori di accessoProprietà per l'incapsulamentoImplementazione dell'occultamento dei datiModelli di immutabilitàRiepilogo - Registri degli studentiEsercitati da solo: Compilatore C# online