繁体   English   中英

如何通过包装类访问direcly类成员的方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM