在写RabbitMq发送消息方法时候,发现一个问题 byte[] 怎么能转换成 ReadOnlyMemory<byte> 类型
在写RabbitMq 发现一个问题 byte[] 怎么能转换成 ReadOnlyMemory 类型 后来查看 ReadOnlyMemory类型发现有个运算符重载
public static implicit operator ReadOnlyMemory(T[]? array);
这个方法到底是做什么用的 能将 数组 转换 成 ReadOnlyMemory<byte> 类型的?
1 public void Send(string message) 2 { 3 byte[] bytes = Encoding.UTF8.GetBytes(message); 4 ReadOnlyMemory<byte> read = bytes; 5 IModel channel = this._connection.CreateModel(); 6 channel.BasicPublish("exchange", "routingKey", null, bytes); 7 }
查找 运算符重载 原来这是隐式转换,之前很少用到所以不了解
implicit 关键字
在 C# 中,对于没有子父类关系的用户定义类型,也是可以实现显式和隐式转换的。C# 允许用户定义类型通过使用
implicit 和 explicit 关键字来控制对象的赋值和对象的类型转换。它的定义形式如下:
public static <implicit/explicit> operator <结果类型>(<源类型> myType)
这里以结果类型为方法名,源类型对象作为参数,只能是这一个参数,不能定义第二个参数,但可以通过该参数对象访问其类的私有成员。下面是一个既有显式又有隐式转换操作符的例子:
1 public class BinaryImage 2 { 3 private readonly bool[] _pixels; 4 5 // 隐式转换操作符示例 6 public static implicit operator ColorImage(BinaryImage bm) 7 { 8 return new ColorImage(bm); 9 } 10 11 // 显式转换操作符示例 12 public static explicit operator bool[](BinaryImage bm) 13 { 14 return bm._pixels; 15 } 16 } 17 18 public class ColorImage 19 { 20 public ColorImage(BinaryImage bm) { } 21 }
这样,我们就可以把 BinaryImage 对象隐式转换为 ColorImage 对象,把 BinaryImage 对象显式转换为 bool 数组对象:
1 var binaryImage = new BinaryImage(); 2 ColorImage colorImage = binaryImage; // 隐式转换 3 bool[] pixels = (bool[])binaryImage; // 显式转换