在写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; // 显式转换

 

posted on 2023-01-28 10:39  是水饺不是水饺  阅读(109)  评论(0编辑  收藏  举报

导航