Formazione
Percorso di apprendimento
Usare i dati di una variabile in applicazioni console C# (Introduzione a C#, Parte 4) - Training
Usare i dati di una variabile in applicazioni console C# (Introduzione a C#, Parte 4)
Questo browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
In questi esempi viene illustrato come usare la covarianza e la controvarianza nei delegati generici Func
e Action
per consentire il riutilizzo dei metodi e offrire maggiore flessibilità nel codice.
Per altre informazioni sulla covarianza e la controvarianza, vedere Varianza nei delegati (C#).
L'esempio seguente illustra i vantaggi del supporto di covarianza nei delegati generici Func
. Il metodo FindByTitle
accetta un parametro di tipo String
e restituisce un oggetto di tipo Employee
. Tuttavia, è possibile assegnare questo metodo al delegato Func<String, Person>
perché Employee
eredita Person
.
// Simple hierarchy of classes.
public class Person { }
public class Employee : Person { }
class Program
{
static Employee FindByTitle(String title)
{
// This is a stub for a method that returns
// an employee that has the specified title.
return new Employee();
}
static void Test()
{
// Create an instance of the delegate without using variance.
Func<String, Employee> findEmployee = FindByTitle;
// The delegate expects a method to return Person,
// but you can assign it a method that returns Employee.
Func<String, Person> findPerson = FindByTitle;
// You can also assign a delegate
// that returns a more derived type
// to a delegate that returns a less derived type.
findPerson = findEmployee;
}
}
L'esempio seguente illustra i vantaggi del supporto di controvarianza nei delegati generici Action
. Il metodo AddToContacts
accetta un parametro di tipo Person
. Tuttavia, è possibile assegnare questo metodo al delegato Action<Employee>
perché Employee
eredita Person
.
public class Person { }
public class Employee : Person { }
class Program
{
static void AddToContacts(Person person)
{
// This method adds a Person object
// to a contact list.
}
static void Test()
{
// Create an instance of the delegate without using variance.
Action<Person> addPersonToContacts = AddToContacts;
// The Action delegate expects
// a method that has an Employee parameter,
// but you can assign it a method that has a Person parameter
// because Employee derives from Person.
Action<Employee> addEmployeeToContacts = AddToContacts;
// You can also assign a delegate
// that accepts a less derived parameter to a delegate
// that accepts a more derived parameter.
addEmployeeToContacts = addPersonToContacts;
}
}
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback:
Formazione
Percorso di apprendimento
Usare i dati di una variabile in applicazioni console C# (Introduzione a C#, Parte 4) - Training
Usare i dati di una variabile in applicazioni console C# (Introduzione a C#, Parte 4)