我们对比一下UE C++、C++ 、C#的构造方法:
1. UE4 C++例子:
// 声明和构造合并在一起static ConstructorHelpers::FObjectFinder<UTexture2D> CrosshairTexObj(TEXT("/Game/Path"));// 使用加载的资源UTexture2D* Texture = CrosshairTexObj.Object;
2.C#等效写法:
// 构造函数声明public class TextureFinder<T>{public T Object { get; private set; }public TextureFinder(string path){// 加载逻辑Object = LoadAsset<T>(path);}}// 使用方式static TextureFinder<Texture2D> crosshairTexObj = new TextureFinder<Texture2D>("/Game/Path");Texture2D texture = crosshairTexObj.Object;
3. 基本构造函数对比:
// C++class MyClass {
public: // 公共访问修饰符MyClass() {} // 默认构造函数,无参数MyClass(int x) : value(x) {} // 带参数构造函数,使用初始化列表
private: // 私有访问修饰符int value; // 私有成员变量
};// 使用MyClass obj1; // 调用默认构造函数MyClass obj2(10); // 调用带参数构造函数
// C#
public class MyClass
{private int value;public MyClass() {} // 默认构造函数public MyClass(int x) // 带参数构造函数{ value = x;}
}// 使用MyClass obj1 = new MyClass(); // 调用默认构造函数MyClass obj2 = new MyClass(10); // 调用带参数构造函数
C++的构造方法解析:
MyClass(int x) : value(x) {}| | | || | | └─ 参数x的值| | └─ 将要初始化的成员变量| └─ 构造函数参数└─ 构造函数名(与类名相同)
主要区别:
- C++不需要new关键字创建对象
- C++构造函数可以使用初始化列表(:value(x))
- C#必须使用new创建对象
- C++中可以在声明时直接调用构造函数
- C#中通常需要分开声明和构造