You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过重载+=运算符为Person类实例的不同属性赋值?

实现Person类的+=运算符重载来赋值不同类型属性

当然可以实现你想要的+=语法!C#支持为同一个运算符重载不同参数类型的版本,刚好能满足你的需求——通过不同类型的右值来给Person的对应属性赋值。

首先先修正一下你代码里的小拼写错误:IsMaried应该是IsMarried,下面的示例我已经改过来了。

修改后的Person类实现

class Person { 
    public string Name { get; set; } 
    public DateTime Birth { get; set; } 
    public bool IsMarried { get; set; } 

    // 重载+运算符,处理字符串赋值给Name
    public static Person operator +(Person person, string name)
    {
        person.Name = name;
        return person;
    }

    // 重载+运算符,处理DateTime赋值给Birth
    public static Person operator +(Person person, DateTime birthDate)
    {
        person.Birth = birthDate;
        return person;
    }

    // 重载+运算符,处理bool值赋值给IsMarried
    public static Person operator +(Person person, bool isMarried)
    {
        person.IsMarried = isMarried;
        return person;
    }

    public override string ToString() => $"{Name} was born on {Birth.ToShortDateString()} and is{(IsMarried ? "" : " not")} married"; 
}

使用示例

var person = new Person();
person += "Erick"; // 给Name赋值
person += new DateTime(1998, 10, 28); // 给Birth赋值
person += true; // 给IsMarried赋值

Console.WriteLine(person);
// 输出结果:Erick was born on 10/28/1998 and is married

原理说明

C#里的+=运算符其实是编译器的语法糖,它会自动转换成person = person + value。所以我们只需要为Person类重载三个不同参数类型的+运算符即可:

  • 当右值是string时,修改Name属性
  • 当右值是DateTime时,修改Birth属性
  • 当右值是bool时,修改IsMarried属性

上面的实现是直接修改原实例后返回,如果你希望保持实例不可变(每次操作返回新对象),也可以这样写运算符:

public static Person operator +(Person person, string name)
{
    return new Person 
    { 
        Name = name, 
        Birth = person.Birth, 
        IsMarried = person.IsMarried 
    };
}

这种方式下,每次+=都会创建一个新的Person对象,原对象不会被修改,适合需要不可变对象的场景。

内容的提问来源于stack exchange,提问作者Erick Ruh Cardozo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:57:56