Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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#_Assignment Operator - Fatal编程技术网

如何在c#中实现赋值运算符,或者什么是替代方法?

如何在c#中实现赋值运算符,或者什么是替代方法?,c#,assignment-operator,C#,Assignment Operator,我正在寻找一种跳过C#中的复制构造函数方法的好方法,并寻找一种在下面代码中完成赋值的方法: class Person { string Name; int Age; public Person() { } //public Person(Person p)//copy contructor //{ // this.Name = p.Name; // this.Age = p.Age; //} public Per

我正在寻找一种跳过C#中的复制构造函数方法的好方法,并寻找一种在下面代码中完成赋值的方法:

class Person
{
    string Name;
    int Age;
    public Person() { }
    //public Person(Person p)//copy contructor
    //{
    //    this.Name = p.Name;
    //    this.Age = p.Age;
    //}
    public Person(string name ,int age)
    {
        this.Name = name;
        this.Age = age;
    }
    public void Set(string name,int age)
    {
        this.Name = name;
        this.Age = age;
    }
    public void Get()
    {
        Console.WriteLine("{0}  {1}",Name,Age);
    }
};

        Person person= new Person("Arif",40);
        person.Get();
        //Person person2 = new Person(person);//skip copy
        Person person2 = new Person();
        person2 = person;//use assignment
        person2.Get();
        person.Set("Mahmood",44);
        person.Get();
        person2.Get();
当实现复制构造函数时,我在复制的情况下看到的输出是期望的,如下所示

Arif  40
Arif  40
Mahmood  44
Arif  40
Arif  40
Arif  40
Mahmood  44
Mahmood  44
但我看到的作业输出是错误的,如下所示

Arif  40
Arif  40
Mahmood  44
Arif  40
Arif  40
Arif  40
Mahmood  44
Mahmood  44

如何获得正确的输出?

如果我们只看你提供的例子,你需要一个“结构”的人。它们是通过复制值而不是参照来指定的

不能重写C中的运算符“=”#

=,,,,?:,?,?,,->,=>,f(x),as,checked,unchecked,default,delegate,is,new,sizeof,typeof===>这些运算符不能重载

此外,否认正常行为的作业令人困惑

person1 = person2; //Your Person class
county1 = country2; // Some other class
两者都是类(个人和国家)的实例,因此被引用。为什么一个人的行为和国家不同

如果您使用的是类,那么可以选择复制构造函数。
使用赋值运算符的一种方法是使用非引用类型,如原语或结构。但是,结构不应该有函数!这是类的。

你可以尝试在C++中写C++,但你真的不应该写。我们不做复制构造函数,也不能覆盖赋值。本质上是人和人物2指向同一个地方,如果你想克隆对象,那就是一个不同的thigJava和C++不同于C++,因为它们在分配时不做深层克隆(即调用复制构造函数)。他们只是简单地分配浅层引用。你确定这是一个真正的问题吗
Person
是一个具有强身份的域实体,您应该尽可能避免克隆。但是,您不希望仅根据分配做出此类决定。基本问题实际上是关于
Person
s是否与值类似。如果你有两个具有相同字段的
人,那么他们真的是同一个“东西”吗?绝对是。但是问题只是关于技术细节,我的回答也是这样。不,这个问题是由一个明确地用来写C++的人写的,他不想学习C语言的细微差别。他们犯了根本性的错误,如果他们接受了你的建议,他们只会继续犯错误。没有“技术细节”,只有有缺陷的思维。是的,这一部分反映在“如果我们只看你提供的例子”,也就是“你的问题可能有更大的图景,但这取决于你的判断”。