我可以重载 = 赋值运算符吗?

Can I overload the = assignment operator?

如果我有这样的用户定义类型,在使用该类型时会有一些噪音,因为在分配或读取内容时必须添加 属性name 值

public class CharArray
{
    private byte[] _value;

    public CharArray(int length)
    {
        _value = new byte[length];
    }

    public string Value
    {
        get => Encoding.ASCII.GetString(_value);
        set
        {
            if (value.Length > _value.Length)
                throw new Exception($"Max length is {_value.Length} characters");

            _value = Encoding.ASCII.GetBytes(value.PadRight(_value.Length));
        }
    }
}

所以用法是这样的:

CharArray field = new CharArray(10);
field.Value = "Test";
string fieldAsString = field.Value;

在读取值时删除值 属性 非常简单,只需添加一个隐式运算符即可。这将使 CharArray 的用户在读取值

时避免使用“.Value”
    public static implicit operator string(CharArray c)
    {
        return c.Value;
    }

但是我还没有找到在赋值时避免 .Value 属性 的方法。有什么想法吗?

我不能使用静态方法,因为我需要构造函数中给定的值。所以我想我正在寻找一种在非静态方法中重载 = 运算符的方法。这在 C# 中可能吗?

您可以在其他方向进行隐式转换 string -> CharArray:

public static implicit operator CharArray(string s)
{
    return new CharArray(s.Length){ Value = s };
}

然后这个有效:

CharArray field = new CharArray(10);
field = "Test"; // all good!
string fieldAsString = field;