java - 如何通过包装类直接访问类成员方法

标签 java c# c++

我有一段代码,类似于在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/

相关文章:

java - Apache Camel - JDBC存储过程和事务处理疑惑

java - OAuth 401 未经授权

c# - 如何允许用户在我的 MVC 网站上创建自己的子域?

c# - winform 友好的类名

c# - 为什么在不使用 async/await 的情况下使用 Dapper QueryAsync<T> 时抛出 TaskCanceledException?

java - 从接口(interface)实现方法但具有不同的参数

java - WebDriver等待,不同的等待条件

c++ - 为什么这个 dynamic_cast<T> 不起作用?

c++ - 在 Linux 中运行 C++

c++ - 系统头文件/usr/include/i386_types.h错误