L'initialisation de l'objet imbriqué propriétés
J'ai une classe appelée employé qui a un champ appelé l'assurance, qui est de type assurance comme ce
public class Employee
{
public string Name;
public Insurance Insurance;
}
J'ai une autre classe appelée Assurance
public class Insurance
{
public int PolicyId;
public String PolicyName;
}
Maintenant dans le programme principal, je veux faire quelque chose comme
var myEmployee = new Employee();
myEmployee.Name = "Jhon";
myEmployee.Insurance.PolicyId = 123 ;
myEmployee.Insurance.PolicyName = "Life Time" ;
C# est de se plaindre et je sais comment résoudre ce problème par la création d'une instance de l'Assurance de la classe.
Ma question est ce que je peux en quelque sorte affecter les valeurs des champs dans la façon dont je veux le faire dans le programme principal utilisant comme
**
myEmployee.Insurance.PolicyId = 123 ;
myEmployee.Insurance.PolicyName = "Life Time" ;
**
J'ai essayé
public class Employee
{
public Employee()
{
Insurance Insurance = new Insurance();
}
public String Name;
public Insurance Insurance;
public class Insurance
{
public int PolicyId;
public String PolicyName;
}
}
Dans la méthode main lorsque j'essaie
class Program
{
static void Main(string[] args)
{
var joe = new Employee();
joe.Name = "Joe";
joe.Insurance.
}
J'obtiens cette erreur-
Erreur 2 Ambiguïté entre " ConsoleApplication1.De l'employé.L'assurance " et " ConsoleApplication1.De l'employé.Assurance " c:\users\lenovo\documents\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\Programme.cs 15 17 ConsoleApplication1
Vous avez défini une classe "d'Assurance" et une propriété "Assurance" à la fois au sein de l'Employé. Doit être unique nommé au sein de la classe, sinon il ne sait pas laquelle travailler. Rendre l'Assurance de sa propre classe, ou de renommer l'un d'entre eux. J'ai mis à jour ma réponse pour refléter vos modifications et de les résoudre.
OriginalL'auteur jhon.smith | 2013-08-08
Vous devez vous connecter pour publier un commentaire.
Vous pourriez instancier l'Assurance des Employés du constructeur, donc c'est fait automatiquement pour vous. Vous pourriez fournir des valeurs par défaut pour s'assurer qu'il est entendu que n'est pas encore défini pour être valide lors de l'accès plus tard.
Ou de garder les classes imbriquées:
OriginalL'auteur bland
Sans avoir besoin de modifier votre
Employee
la classe, vous pouvez utiliser les initialiseurs d'objets:Sinon, et peut-être, de préférence, vous pouvez avoir la
Employee
classe créer une nouvelle instance deInsurance
soit dans son constructeur (comme dans les autres réponses), ou une autre option serait de le faire dans leInsurance
getter de la propriété elle-même, de sorte qu'il est instancié que si vous l'utilisez. Voici un exemple de ce dernier:Enfin, je voudrais vous suggérer de ne pas créer des classes qui ont tous les domaines publics, sauf si vous savez vraiment qui est ce que vous voulez. Au lieu de cela, je voudrais envisager d'utiliser propriétés sur les champs. J'ai incorporé d'autres suggestions dans le code suivant, et ma propre:
Il serait mieux si l'Assurance a été un objet lourd. Je vais vous donner.
Je suis d'accord à 100%, je voulais juste montrer une autre approche possible.
OriginalL'auteur Cᴏʀʏ
Bien sûr, mais comment allez-vous attribuer quelque chose qui est de l'appartenance à un
null
objet?Vous devez instancier
Insurance
dansEmployee
'constructeur.MODIFIER au Sujet de votre commentaire:
Suivant cette approche, vous sera être en mesure d'accéder à
myEmplyee.Insurance.PolicyID
avec deux points. Le constructeur est à l'intérieur de des Employés de la classe, de sorte que vous n'aurez pas à taper quoi que ce soit de plus que ce que vous avez déjà essayé de faire, une fois que vous mettre en œuvre.OriginalL'auteur KappaG3
Vous pouvez écrire un constructeur pour votre employé qui va instancier
Insurance
this
mot-clé est redondant à moins d'être utilisés pour les méthodes d'extension.Il permet d'éviter la confusion lorsque son nom est le même que son type.
le
this
mot-clé est plus expressif, et il est utile lorsque vous essayez de lire un code plus complexe. surtout quand vous êtes en train de lire le code que vous avez vous-même n'avez pas à écrireNope, ça ne fonctionne pas merci de voir mon montage dans la question
l'erreur que vous obtenez est parce qu'il y a 2 significations à
Employee.Insurance
Vous pouvez déplacer votreInsurance
classe à l'extérieur deEmployee
OriginalL'auteur Sam I am