Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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#_Oop - Fatal编程技术网

C# 将对象传递给另一个类?

C# 将对象传递给另一个类?,c#,oop,C#,Oop,我最近一直在研究构造函数,我正在尝试将一个对象传递给另一个类文件,我这样做的方式如下: class Program { static void Main(string[] args) { Class1 objPls = new Class1(); objPls.nameArray[0] = "jake"; objPls.nameArray[1] = "tom"; objPls.nameArray[2] = "mar

我最近一直在研究构造函数,我正在尝试将一个对象传递给另一个类文件,我这样做的方式如下:

class Program
{
    static void Main(string[] args)
    {
        Class1 objPls = new Class1();

        objPls.nameArray[0] = "jake";
        objPls.nameArray[1] = "tom";
        objPls.nameArray[2] = "mark";
        objPls.nameArray[3] = "ryan";

        Echodata form2 = new Echodata(objPls);
    }
}

class Class1
{
    public string[] nameArray = new string[3];
}

class Echodata
{
    public Class1 newobject = new Class1();

    public Echodata(Class1 temp)
    {
        this.newobject = temp;
    }

    // so now why cant i access newobject.namearray[0] for example?
}
问题是我无法访问对象以进入阵列


传递物体的方法有哪些?有人告诉我这大概是一种方法,我已经尝试了一段时间,但没有效果。

不确定这是什么,你不能做。例如,修改后的代码可以工作,或者至少可以编译

   class echodata
    {
        public Class1 newobject = new Class1();

        public echodata(Class1 temp)
        {
            this.newobject = temp;
        }

        // so now why cant i access newobject.namearray[0] for example?
        // What kind of access do you want?

        public void method1()
        {
            newobject.nameArray[0] = "Jerry";
        }

    }

当您试图在数组的第四个索引上设置“ryan”字符串时,代码会抛出一个错误。最初将数组的长度设置为3

在EchoData类中,您可以访问nameArray对象而不会出现问题,但必须在方法或构造函数中访问它。您不能在这些之外操纵它的内容


请记住,在EchoData类中,您将看不到在主方法中设置的值。

很难说,因为您没有包含完整的可编译示例,并且您没有确切解释“无法访问”的含义(您是否遇到错误?是什么?)

但是,我猜想您正在尝试根据代码从类级别访问传入的对象字段

即,您正在尝试这样做:

class Echodata
{
    public Class1 newobject; // you don't need to initialize this

    public Echodata(Class1 temp)
    {
        this.newobject = temp;
    }

    newobject.newArray[0] = "Can't do this at the class level";
}
只能从成员方法中访问nameArray

class Echodata
{
    public Class1 newobject; // you don't need to initialize this

    public Echodata(Class1 temp)
    {
        this.newobject = temp;
    }

    public void DoSOmething() {
        newobject.newArray[0] = "This works just fine";
    }
}

如果类不包含实例构造函数声明,则会自动提供默认实例构造函数。该默认构造函数只调用直接基类的无参数构造函数。如果直接基类没有可访问的无参数实例构造函数,则会发生编译时错误。如果类是抽象的,那么默认构造函数的声明可访问性将受到保护。否则,默认构造函数的声明可访问性是公共的。如果您提供确切的编译器错误以及最小的重新编译案例,这总是有帮助的。如果没有编译器错误,请解释您的示例输入是什么、预期输出是什么以及实际输出是什么。您上面的代码甚至不会编译,它将在这一行中断:
objPls.nameArray[3]=“ryan”
因为
nameArray
的大小为3,但您正在尝试设置第四个元素。您是否注意到,由于nameArray的大小为3,但您在objPls中引用的大小为4,因此出现了异常。nameArray[3]=“ryan”。如果将class1更改为string[]nameArray=newstring[4],它应该可以工作