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

时间:2018-05-18 09:00:05

标签: 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 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

如何获得正确的输出?

2 个答案:

答案 0 :(得分:0)

如果我们完全按照您提供的示例,您需要Person作为'结构'。它们是通过复制值而不是引用来分配的。

答案 1 :(得分:0)

您无法覆盖运算符" ="在C#中 See here in MSDN

  

=,。,?:,??, - >,=>,f(x),as,checked,unchecked,default,delegate,is,new,sizeof,typeof ======= >这些运营商不能超载

此外,拒绝正常行为的作业令人困惑

person1 = person2; //Your Person class
county1 = country2; // Some other class

两者都是类(Person& Country)的实例,因此被引用。为什么人的行为不是国家?!?

如果您正在使用类,则可以使用复制构造函数。 使用赋值运算符的一种方法是使用非引用类型,如基元或结构。但是,结构不应该有功能!那是什么课程。