Prenez cet exemple:Var inférence de type mot-clé ambiguïté lorsque les deux interface et la mise en œuvre sont présents
interface IEntity {
string Name { get; set; }
}
class Product : IEntity {
public string Name { get; set; }
public int Count { get; set; } // added member
}
class Client {
void Process() {
var product = new Product();
int count = product.Count; // this is valid
}
}
Dans l'exemple ci-dessus, quel est le type de produit? Est-ce IEntity ou produit? Il semble que le produit soit de type implémentation concrète (Produit). Si tel est le cas, var ne devrait pas être utilisé uniquement dans des circonstances particulières. Mais je vois que des outils comme resharper recommandent d'utiliser var par défaut. Ne devrait pas un programme à une interface?
Le point est, la variable "produit" sera toujours par défaut au type de "Produit" (plutôt que IEntity) indépendamment de si la classe implémentée (Product) a des membres supplémentaires, quand on utilise var. – Mank
Vous pouvez créer une interface 'IProduct' qui inclut les membres ajoutés par' Product'. – ironsam