-2
votes

Pouvons-nous créer plus de 1 instance avec constructeur privé?

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);
    }
}


2 commentaires

Bien que le constructeur soit privé, la méthode CallMe 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é ici signifie que seuls les membres de test peuvent accéder au constructeur (et créer des instances). Donc, oui, dans votre exemple deux instances différentes sont créées.


4 Réponses :


4
votes

Nous savons tous que nous ne pouvons pas créer d'objet de classe ayant constructeur privé.

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.

Combien d'instances de cette classe peuvent être créées

Dans votre échantillon de code, il existe deux instances de la classe test .

Je pense que ce qui pourrait vous confondre, vous êtes vous attendez à la deuxième console.writeline pour imprimer 30 , mais il est imprimé 20 . C'est parce que Public int Val; est un membre d'instance. Si c'était un membre statique, il n'aurait pas été imprimé 30


0 commentaires

0
votes

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);


0 commentaires

0
votes

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.


0 commentaires

1
votes

Peut-être que quelque chose comme ceci est ce que vous recherchez: xxx

puis créez de nouvelles instances telles que: xxx

de cette façon Vous pouvez facilement accéder aux membres de chaque instance. Par exemple. test1.val


0 commentaires