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