c#对象定义中的面向对象编程

时间:2013-08-17 07:22:45

标签: c# class oop object

我有一个我定义的对象,我定义我的对象的类有一个变量。此变量的类型与此类相同,请参见下文:

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你告诉我我有价值吗?是0还是1还是2?

2 个答案:

答案 0 :(得分:1)

看起来您正在尝试了解有关C#和类的更多信息。让我给你一些可以帮助你的东西。这不是您问题的直接答案,因为需要更多信息才能正确回答。但是一般的一些指示可能会帮助你解决问题:

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

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

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

在another_class中,你有一个方法可以检查宝马是否为空,如果没有,它会创建一辆新车。宝马在这里永远都是空的,因为之前没有创造过。

所以即使你有“全局”变量,“another_class”也没有直接引用它,所以它不会看到它。所以我认为你的问题的答案是它总是无效,而不是“活着”。

答案 1 :(得分: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。但是如果有其他鳕鱼影响了Machine.BMW并将其设置为null,那么它将是2。

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

格雷格