You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从另一个类访问已赋值的公共属性值?

嘿,我完全懂你的困扰——你想在ClassTwo里拿到ClassOne中被MyMethod设置的ID值22,但现在每次新建ClassOne实例,ID都是默认的0,因为根本没触发赋值的逻辑对吧?下面给你几个可行的解决方案,你可以根据自己的实际场景选:

方案1:手动调用赋值方法

这是最直接的方式,既然ID是在MyMethod里赋值的,那创建实例后先调用这个方法就行:

public class ClassTwo {
    public void MyLocalMethod() {
        ClassOne OriginalClass = new ClassOne();
        OriginalClass.MyMethod(); // 先触发ID的赋值逻辑
        var LocalID = OriginalClass.ID; // 现在LocalID就是22啦
    }
}

方案2:在构造函数里初始化ID

如果这个ID的默认值就是22,不需要通过方法触发,那直接把赋值逻辑放到ClassOne的构造函数里,实例一创建ID就会被设置:

public partial class ClassOne {
    private int iD;
    public int ID {
        get { return iD; }
        set { iD = value; }
    }

    // 构造函数里直接初始化ID
    public ClassOne() {
        ID = 22;
    }

    public void MyMethod() {
        // 如果这个方法还有其他逻辑可以保留,否则也可以删掉
        ID = 22;
    }
}

public class ClassTwo {
    public void MyLocalMethod() {
        ClassOne OriginalClass = new ClassOne();
        var LocalID = OriginalClass.ID; // 现在直接就是22了
    }
}

方案3:用单例模式共享同一个实例

如果你的ClassOne在整个程序里只需要一个实例,那可以用单例模式,这样不管在哪调用,都是同一个已经设置好ID的实例:

public partial class ClassOne {
    private static ClassOne _instance;
    private int iD;
    public int ID {
        get { return iD; }
        set { iD = value; }
    }

    // 私有构造函数,防止外部随意新建实例
    private ClassOne() {}

    public static ClassOne GetInstance() {
        if (_instance == null) {
            _instance = new ClassOne();
            _instance.MyMethod(); // 初始化时就设置好ID
        }
        return _instance;
    }

    public void MyMethod() {
        ID = 22;
    }
}

public class ClassTwo {
    public void MyLocalMethod() {
        ClassOne OriginalClass = ClassOne.GetInstance();
        var LocalID = OriginalClass.ID; // 这里拿到的就是22
    }
}

方案4:传递已初始化的实例

如果在程序的其他地方已经存在一个调用过MyMethod的ClassOne实例,那直接把这个实例传给ClassTwo的方法就行,不用新建:

// 假设在某个地方已经创建并初始化了ClassOne实例
ClassOne existingInstance = new ClassOne();
existingInstance.MyMethod();

// 修改ClassTwo的方法,接收已有的实例
public class ClassTwo {
    public void MyLocalMethod(ClassOne existingClassOne) {
        var LocalID = existingClassOne.ID; // 这里就是22了
    }
}

// 调用ClassTwo的方法时传入实例
ClassTwo classTwo = new ClassTwo();
classTwo.MyLocalMethod(existingInstance);

为啥你的原代码不行?

你每次new ClassOne()都会创建一个全新的实例,这个新实例的ID还没被MyMethod赋值过,所以是int类型的默认值0,而不是22。核心逻辑就是:必须确保你使用的ClassOne实例已经执行过ID的赋值操作,才能拿到22这个值。

内容的提问来源于stack exchange,提问作者mjordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:54:21