[英]Is there any way to “extend” or make a shortcut to a Java wrapper class' wrapped member's methods?
[英]how to access direcly class member's methods via wrapper class
我有一段代码,类似于在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#类型分为'值类型'和'引用类型'
引用类型(如类,接口)就像C ++中的指针一样,值保存在堆中,堆栈保存堆的地址。
值类型(例如int,long,char,struct)保存在堆栈上。
C#只有值类型支持指针操作(您必须在项目中设置'允许不安全的代码')。 在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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.