您只能使用第二个类创建类对象(第一个类没有构造函数?)

dam*_*ned 2 c# constructor class

ScriptHookDotNet的示例:

头等舱:

public sealed class Vehicle : GTA.base.HandleObject
//Member of GTA

public abstract class HandleObject : GTA.base.Object
//Member of GTA.base

public abstract class Object
//Member of GTA.base
Run Code Online (Sandbox Code Playgroud)

二等:

public sealed class World
//Member of GTA
Run Code Online (Sandbox Code Playgroud)

使用方法:

public static GTA.Vehicle CreateVehicle(GTA.Vector3 Position)
Run Code Online (Sandbox Code Playgroud)

您无法使用以下方法从Vehicle创建对象:

Vehicle veh = new Vehicle();
Run Code Online (Sandbox Code Playgroud)

因为Vehicle没有构造函数.

但是你可以使用这段代码:

Vehicle veh = World.CreateVehicle(params);
Run Code Online (Sandbox Code Playgroud)

这个怎么做的?

Tej*_*ejs 8

构造函数是私有的,因此它们强制您使用特定方法来创建实例.这被称为工厂模式; 在World类的内部,该方法具有Vehicle使用构造函数创建新实例的能力,但您不能.

编辑:如果你想创建这种功能,那么你会做这样的事情:

public class MyPublicClass
{
    public MyPrivateClass CreateClass()
    {
         return MyPrivateClass.GetInstance();
    }
}

public class MyPrivateClass
{
    internal static MyPrivateClass GetInstance() { return new MyPrivateClass(); }        

    protected MyPrivateClass() { }
}
Run Code Online (Sandbox Code Playgroud)