我有一段代码,类似于在C++中实现智能指针的方式。
template <class T>
class WrapObject
{
public:
WrapObject(T* data)
{
_data = data;
}
T* operator->()
{
return _data;
}
private:
T* _data;
};
class Hello
{
public:
void sayHello()
{
std::cout << "hello world" << std::endl;
}
};
int main() {
Hello h;
WrapObject<Hello> wh(&h);
wh->sayHello();
return 0;
}
在 main 函数中,我们可以使用运算符“->”直接从 WrapObject 访问 Hello 对象的所有方法。
有没有办法在 C# 或 Java 中做这样的事情??
最佳答案
C#类型分为'值类型'和'引用类型'
引用类型(如类,接口(interface))就像C++中的指针,值保存在堆中,栈保存堆的地址。
值类型(如int、long、char、struct)保存在栈中。
C#只有值类型支持指针操作(必须在项目中设置'allow unsafe code')。在C#中你不能让引用类型分配在栈上。你可以简单地认为引用类型是一个指针
public class MyClass
{
public string name { get; set; }
}
public struct MyStruce
{
public string name { get; set; }
}
static void Main()
{
//MyClass *myClass=new MyClass()
//*myClass->name="Lee";
MyClass myClass = new MyClass();
myClass.name = "Tom";
//MyStruce myStruce;
//myStruce.name="Jack";
MyStruce myStruce = new MyStruce();
myStruce.name = "Jack";
}
您对 C# 的代码更改是
public class WrapObject<T>
{
private T _data;
public WrapObject(T data)
{
_data = data;
}
public T Data
{
get { return _data; }
}
}
public class Hello
{
public void SayHello()
{
Console.WriteLine("hello world");
}
}
static void Main()
{
Hello h = new Hello();
WrapObject<Hello> wh = new WrapObject<Hello>(h);
wh.Data.SayHello();
}
关于java - 如何通过包装类直接访问类成员方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43647905/