我们可以使用私有构造函数创建多个实例吗?



我们都知道我们不能创建具有私有构造函数的类的对象。所以问题来了 可以创建多少个此类的实例.请在下面找到示例代码。

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 个对象。 需要帮助理解这一点。

我们都知道我们不能创建具有私有构造函数的类的对象。

嗯,这不准确。您可以使用仅具有私有构造函数的类的对象(实例),就像在问题中的代码中一样。
您不能做的是从代码中的其他任何位置创建该类的实例。

可以创建多少个此类的实例

在代码示例中,有两个类Test的实例。

我认为可能会让您感到困惑的是,您希望第二Console.WriteLine打印30,但它打印20.这是因为public int val ;是实例成员。如果它是静态成员,则打印30

也许像这样的东西就是你要找的:

public static Test Callme(int GetVal)
{
Test obj = new Test(GetVal);
Console.WriteLine(obj.val);
return obj;
}

然后创建新实例,例如:

Test test1 = Test.Callme(10);
Test test2 = Test.Callme(20);

这样,您可以轻松访问每个实例的成员。 例如测试1.val

Callme方法是一个静态方法。静态方法不需要调用对象实例。它们没有 this(关键字)引用,可以直接在类上调用。在你的情况下Test.CallMe(someValue).请注意,此处不涉及对象实例。 如果CallMe不是静态方法,则需要一个实例/对象来调用它。例如

Test ob = new Test();
ob.CallMe(someValue);

您的示例说明的是私有字段/方法的使用。 当像构造函数或归档这样的方法被标记为私有关键字时,该方法/字段只能从声明类中调用/访问。

这意味着CallMe可以访问构造函数,因为CallMe是类的成员,构造函数是类的成员,因此它们都可以相互访问。

当一个类只有一个构造函数并且该构造函数是私有的时,这实际上意味着只能从类中创建类的实例。

因此,在当前示例中,CallMe每次调用类时都会创建该类的实例。 如果调用CallMe2 次,则将创建该类的 2 个实例。

由于方法 Callme 是静态的,因此系统在使用之前的某个时间点对其进行实例化,然后保留在内存中以供将来调用。无论创建了多少个类的实例,都只能创建类的静态成员的一个副本。

相关内容

  • 没有找到相关文章

最新更新