我可以重载 = 赋值运算符吗?
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;
如果我有这样的用户定义类型,在使用该类型时会有一些噪音,因为在分配或读取内容时必须添加 属性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;