La solution commune est d'appeler une méthode statique appartenant au type Cela permet de calculer la valeur du paramètre à transmettre au constructeur de base.
Par exemple:
public B(int x, int y)
: base(x, y, CalculateZ(x, y))
{
}
// You can make this parameterless if it does not depend on X and Y
private static int CalculateZ(int x, int y)
{
//Calculate it here.
int exampleZ = x + y;
return exampleZ;
}
Notez que la CalculateZ
ne peut pas être une méthode d'instance, car la référence this
n'est pas disponible dans initializers constructeur.
de la langue spécification 10.11.1 constructeur initializers:
Une instance constructeur ne peut pas initialiseur accéder à l'instance étant créé. Par conséquent, il est une erreur de compilation pour faire référence à cette dans une expression d'argument de la initialiseur constructeur , comme une erreur de compilation pour une expression arguments pour faire référence à toute instance membre par un simple nom.
EDIT: modification de 'instance' en 'static' dans la description.
Quoi? est 'B: A'? Si oui, comment A peut-il avoir * plus * de données que B? En outre, A ne semble pas avoir un tel constructeur ... – Kobi
Voulez-vous dire classe publique B: A {dans votre exemple? –
Article original modifié. Oui, son B: A –