Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#对象定义中的面向对象编程_C#_Class_Oop_Object - Fatal编程技术网

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

c#对象定义中的面向对象编程,c#,class,oop,object,C#,Class,Oop,Object,我有一个我定义的对象,我定义对象的类有一个变量。此变量的类型与此类相同,请参见以下内容: public class _car { public _car() { } _car BMW = null; } . . . 请注意,最后一行是对象机器的全局定义。 我的问题是,如果在一个不位于_car类的方法中,有这样的操作: public another_Class { public another_class() { } publi

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

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;
    }
公共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_方法,你告诉我i的值是0、1还是2?

看起来你正在尝试学习更多关于C#和类的知识。让我给你一些可能会帮助你的东西。这不是对你问题的直接回答,因为需要更多的信息来正确回答它。但一般来说,一些指针可能会帮助你让你澄清一下这个问题:

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

然后就有了行
public\u car machine=new\u car()

这一行很可能在类内部,因为你不能将它单独放在C#文件中。如果它来自Console.App,那么它可能在主程序内部,因此在启动时运行,然后在运行时对应用程序的其余部分可用

在另一个_类中,您有一个方法检查BMW是否为null,如果不是,它将创建一辆新车。BMW在这里将始终为null,因为它以前从未创建过


因此,即使您有“全局”变量,“另一个类”也没有直接引用它,因此它不会看到它。因此,我认为您的问题的答案是它将始终为空,而不是“活动”。要在编辑后作出响应:

目前尚不清楚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.
你告诉我i的值?是0、1或2?
根据你在代码中显示的内容,它将是1。但是如果有其他cod影响Machine.BMW并将其设置为null,那么它将是2

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


Greg

只要
\u car
的实例存在,字段
BMW
就会存在。它是否为null将取决于该实例是否有赋值。顺便说一句,如果在类外访问该值,我建议使用属性而不是字段。你说的是什么“是活动的”和“使用代码”?(“是非空的”、“分别被称为”)您所说的“全局的”是什么意思"?C#中没有全局变量。您的变量甚至不是静态的。这意味着您需要一个对象引用来访问它。只要有一个对象引用,也会有一个对
BMW
的引用,它不会被处理。此代码不会编译。
机器
在任何地方都没有定义。亲爱的各位我用你的提示修改了问题现在我在等待你的建议我已经根据你的引用修改了问题现在我在等待帮助