繁体   English   中英

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

[英]How to implement assignment operator in c# or what is alternative approach?

我正在寻找一种很好的方法来跳过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

如何获得正确的输出?

如果仅以您提供的示例为例,则需要Person为“结构”。 通过复制值而不是引用来分配它们。

您不能在C#中覆盖运算符“ =”, 请参见MSDN。

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

而且,拒绝正常行为的作业令人困惑

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

两者都是类的实例(人员和国家),因此被引用。 为什么人的行为会不同于国家/地区?!?

如果使用的是类,则可以使用复制构造函数进行复制。 使用赋值运算符的一种方法是使用非引用类型,例如基元或结构。 但是,结构不应该具有功能! 那就是上课的目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM