Nous savons tous que nous ne pouvons pas créer d'objet de classe ayant un constructeur privé. La question se pose donc est de voir combien d'instances de cette classe peuvent être créées. Veuillez trouver un exemple de code ci-dessous.
public class Test { public int val ; private Test(int sent) { val=val +sent; } public static void Callme(int GetVal) { Test obj=new Test(GetVal); Console.WriteLine(obj.val); } } public class Program { public static void Main() { Test.Callme(10); //Console.WriteLine(Test.val); Test.Callme(20); //Console.WriteLine(Test.val); } }
4 Réponses :
Nous savons tous que nous ne pouvons pas créer d'objet de classe ayant constructeur privé. P> blockQuote>
Eh bien, ce n'est pas précis. Vous pouvez créer un objet (instance) d'une classe ayant uniquement des constructeurs privés à l'aide de membres statiques de cette classe, comme dans le code de la question.
Ce que vous ne pouvez pas faire est de créer des instances de cette classe d'ailleurs dans le code. p>Combien d'instances de cette classe peuvent être créées p> blockQuote>
Dans votre échantillon de code, il existe deux instances de la classe
test code>. p>
Je pense que ce qui pourrait vous confondre, vous êtes vous attendez à la deuxième
console.writeline code> pour imprimer
30 code>, mais il est imprimé
20 code>. C'est parce que
Public int Val; code> est un membre d'instance. Si c'était un membre statique, il n'aurait pas été imprimé
30 code> p>
CallMe code> est une méthode statique. Les méthodes statiques ne nécessitent pas d'instance d'objets à appeler. Ils n'ont pas la référence (mot-clé) et peuvent être appelés directement sur la classe. Dans votre situation
test.callme (quelqueévalie) code>. Notez qu'il n'y a pas d'instance d'objet impliquée ici.
Si
Callme code> n'était pas une méthode statique, vous auriez besoin d'une instance / objet pour l'appeler. Par exemple
Test ob = new Test();
ob.CallMe(someValue);
Parce que la méthode CallMe est statique, elle est instanciée par le système à un moment donné avant son utilisation, puis reste en mémoire pour les appels futurs. Il n'y a qu'une copie d'un meme statique d'une classe jamais créée, quel que soit le nombre d'instances de la classe. P>
Peut-être que quelque chose comme ceci est ce que vous recherchez: puis créez de nouvelles instances telles que: p> de cette façon Vous pouvez facilement accéder aux membres de chaque instance. Par exemple. test1.val p> p>
Bien que le constructeur soit privé, la méthode
CallMe code> actes comme une usine statique (bien que ne renvoie pas l'instance). Vous pouvez donc créer autant d'instances que vous le souhaitez dans votre usine.
Le modificateur d'accès d'un constructeur n'a rien à voir avec le nombre d'instances que vous pouvez créer.
privé code> ici signifie que seuls les membres de
test code> peuvent accéder au constructeur (et créer des instances). Donc, oui, dans votre exemple deux instances différentes sont créées.