【问题标题】:C# console, How to reach the identified variable from one class to another class?C# 控制台,如何将已识别的变量从一个类访问到另一个类?
【发布时间】:2018-04-29 09:03:24
【问题描述】:
    interface ICar
    {
        int Speed {get; set;}
    }
    class IgnitionKey: ICar
    {
        public int Speed {get; set;}
        public void Change () 
        {
            Speed = 10;
        }
    }

    class GasBrake: IgnitionKey
    {

    }
    static void Main(string[] args)
    {
        IgnitionKey k = new IgnitionKey();
        GasBrake s = new GasBrake();
        k.Change();
        Console.WriteLine(s.Speed);
        Console.ReadLine();
    }

这是我的代码。使用更改功能,我将速度值更改为 10。但是这个速度值属于接口(我猜)。我有第二个类继承自其他类。我希望速度值等于十。

在 main 中,如果我使用 Console.WriteLine(k.Speed),我可以得到值 10。但是当我使用 s.Speed 时,我需要得到这个值。我怎样才能做到这一点 ?有没有办法使用第二类来改变第一类的价值?

(对不起英语不好)

【问题讨论】:

    标签: c# class interface console


    【解决方案1】:

    在您的代码中,k 和 s 引用了不同的对象,因此其中一个的更改不会影响另一个。 你可以写GasBrake s = k;让booth变量引用同一个对象,或者你可以调用s.Change()而不是k.Change()来修改s

    【讨论】:

    • 感谢您的回答。我还有一个问题。公共无效更改(){ GasBreak g = new GasBreak(); g.速度=10;我在 IgnitionKey 类中编写了这段代码,然后在 main 中运行了这个函数。之后,Consol.WriteLine g.Speed 但这次 g.Speed 和 s.Speed 都等于 0。我认为 g.Speed 将等于 10。为什么不呢?
    • 你真的,真的需要读一本关于 C# 和面向对象编程基础的书。简而言之,您的变量 g 将在您的 Change 方法完成后立即处理。
    • GasBreak g = new GasBreak(); g.速度=10;如果我在 main 中编写此代码,它可以工作。但是我在带有函数的 IgnitionKey 类中使​​用它,并且在 main.js 中使用该函数。这是行不通的。我真的不明白
    【解决方案2】:

    当你这样做时:

     GasBrake s = new GasBrake();
    

    或:

    IgnitionKey k = new IgnitionKey();
    

    这是一个创建的新对象,它有自己分配的内存和自己的状态,它与另一个完全隔离,它们没有任何共享状态。

    由于您创建了两个完全不同的对象,它们都将具有完全不同的状态,它们不能共享状态。为了模仿您想要的内容,您需要使用单个对象但具有不同类型的引用:

    GasBrake s = new GasBrake(); // now just one object created
    IgnitionKey k = s;  // we reference to it using the parent class type 
    k.Change();  // change it's value
    
        Console.WriteLine(s.Speed); // same value will be printed
    

    现在您将看到相同的值,即 10。

    【讨论】:

    • 谢谢,我明白了,但是所有这些代码都会写在 main 中,对吗?我希望主代码尽可能少。我们可以在其中一个带有函数的类中使用此代码,然后在 main 中使用该函数吗?
    猜你喜欢
    • 2013-11-28
    • 2011-10-22
    • 2015-11-22
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多