【问题标题】:Object oriented programming in c# object definitionc#对象定义中的面向对象编程
【发布时间】:2013-08-17 07:22:45
【问题描述】:

我有一个我已经定义的对象,我从中定义我的对象的类有一个变量。这个变量的类型和这个类一样,见下图:

public class _car
{
    public _car()
    {
    }

    _car BMW = null;
}
.
.
.

注意最后一行是对象机器的全局定义。 我的问题是,如果在不位于 _car 类中的方法中执行以下操作:

public another_Class
{

    public another_class()
    {
    }
    public _car machine = new _car();

    public int this_Methode()
    {

        if (Machine.BMW == null){
            Machine.BMW = new _car();
            return 1;
        }
        return 0;
    }

public void main_Methode() {

        int i=this_Methode();
        i+=this_Methode();
        //We run main_method in somewhere in our program now you say i is 0 or 1 or2 ?
    }

}

这样想 //我们现在运行 main_method 你告诉我 i 的值?是 0 还是 1 还是 2?

【问题讨论】:

  • 只要存在_car 的实例,字段BMW 就会存在。它是否为 null 将取决于该实例是否具有分配给它的值。顺便说一句,如果在类外部访问值,我建议使用属性而不是字段。
  • “活着”和“使用代码”是什么意思? (分别是“非空”、“被调用”?)
  • “全球”是什么意思? C# 中没有全局变量之类的东西。你的变量甚至不是静态的。这意味着您需要一个对象引用来访问它。而且只要有对象引用,也会有BMW的引用,并且不会被销毁。
  • 此代码无法编译。 Machine 没有在任何地方定义。
  • 亲爱的,我使用您的提示更改了问题现在我正在等待您的建议

标签: c# class oop object


【解决方案1】:

在您的编辑后回复:

目前尚不清楚 Machine.BMW 的来源。但是如果它在运行时可用,那么它将通过以下方法填充。所以第一次运行时会返回1给I。

public int this_Methode()
{

    if (Machine.BMW == null){
        Machine.BMW = new _car();
        return 1;
    }
    return 0;
}

    int i=this_Methode();  //i = 1 as new car was created.

    i+=this_Methode();  Unless there is some other code running, this_Methode() will return zero as the car was already created.

you tell me i's value? Is 0 or 1 or 2? 根据您在代码中显示的内容,它将为 1。但是如果有其他 cod 影响 Machine.BMW 并将其设置为 null,那么它将是 2。

我喜欢在 Visual Studio 中创建一个测试项目来尝试这些事情。您可以使用一个名为 Visual Studio Express 的免费版本。只需创建一个控制台应用程序并尝试一下。这将有助于快速回答这些问题,因为您可以尝试它并查看它是否按预期工作。当某些事情没有按照我认为的方式工作时,我总是这样做。

格雷格

【讨论】:

    【解决方案2】:

    您似乎正在尝试更多地了解 C# 和类。让我给你一些可以帮助你的东西。这不是您问题的直接答案,因为需要更多信息才能正确回答。但是一般来说,一些提示可能会帮助您并让您澄清问题:

    在您的类中,属性 _car 未使用 BMW 实例初始化,因此在创建新实例时它将为 null。

    然后你有public _car machine = new _car()这一行

    这一行很可能在一个类中,因为你不能只在它自己的 C# 文件中拥有它。如果它来自 Console.App,它可能在主程序中,因此它会在您启动时运行,然后在运行时可供应用程序的其余部分使用。

    在 another_class 中,您有一个方法可以检查 BMW 是否为 null,如果不是,则创建一辆新车。 BMW 在这里将始终为空,因为它之前没有被创建过。

    因此,即使您有“全局”变量,“another_class”也没有直接引用它,所以它不会看到它。所以我认为你的问题的答案是它永远是空的,而不是“活的”。

    【讨论】:

    • 我已经根据您的报价更改了问题,现在我等待帮助
    猜你喜欢
    • 2015-02-12
    • 2011-04-16
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多