我们都知道我们不能创建具有私有构造函数的类的对象。所以问题来了 可以创建多少个此类的实例.请在下面找到示例代码。
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
每次调用类时都会创建该类的实例。 如果调用CallMe
2 次,则将创建该类的 2 个实例。
由于方法 Callme 是静态的,因此系统在使用之前的某个时间点对其进行实例化,然后保留在内存中以供将来调用。无论创建了多少个类的实例,都只能创建类的静态成员的一个副本。