分享
三行代码  ›  专栏  ›  技术社区  ›  Stephanie

传递给未更新的类变量

c#
  •  0
  • Stephanie  · 技术社区  · 7 月前

    这听起来应该是一个非常基本的问题,但我还没有找到答案(即使我知道肯定有很多),我猜我的谷歌搜索技能很差,或者我不知道该搜索什么。

    我有这个密码:

    using System;
    
    public class Program
    {   
        public static void Main()
        {
            var service = new Service();
    
            service.Execute();
        }
    }
    
    public class Service
    {
        private int _foo;
    
        public void Execute()
        {
            _foo = 1;
    
            var bar = new Bar(_foo);
    
            _foo = 2;
    
            bar.WriteLine();
        }
    }
    
    public class Bar
    {
        private readonly int _foo;
    
        public Bar(int foo)
        {
            _foo = foo;
        }
    
        public void WriteLine()
        {
            Console.WriteLine(_foo);
        }
    }
    

    我怎么能让它印出来 2 ? (基本上是 Bar 已初始化)

    ref 但没有运气。

    1 回复  |  直到 7 月前
        1
  •  1
  •   Michael Randall    7 月前

    你所做的对一个 value type

    值类型和引用类型是C的两大类# 这与引用类型的变量不同,后者包含 对该类型实例的引用。默认情况下,在分配任务时, 向方法传递参数或返回方法结果, 如果是值类型变量,则 复制相应的类型实例

    通常,您会将其创建为属性并相应地设置

    public class Bar 
    {
    
         public Bar(int foo) => Foo = foo;
    
         public int Foo {get;set;}
    
         public void WriteLine() => Console.WriteLine(Foo);
    
         ...
    

    用法

    public void Execute()
    {
    
        var bar = new Bar(1);
    
        // set the property instead
        bar.Foo = 2;
    
        bar.WriteLine();
    
        ...