C# 操作符重载问题

独立观察员 2018-12-03 02:11:36


请问各位大佬,这个是操作符重载吗?怎么看它在哪定义的?
...全文
698 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
就是#13说的,
枚举本身就支持 | 运算
xuzuning 2018-12-07
  • 打赏
  • 举报
回复
        enum Student
{
Name, Grade, Class
};
static void Main(string[] args)
{
Console.WriteLine(Student.Name); //Name
Console.WriteLine(Student.Grade | Student.Class); //3
Console.WriteLine(Student.Grade | Student.Name); //Grade
  • 打赏
  • 举报
回复
点鼠标右键,选择"查看定义“啊!
独立观察员 2018-12-07
  • 打赏
  • 举报
回复
引用 14 楼 以专业开发人员为伍 的回复:
嗯,lz 贴出来的截图中,其实已经将 vs 工具给出的重载运算的及时提醒小窗口显示出来了。
实际效果是按位或,但看提示又像操作符重载(这方面不太了解),那到底是哪个呢? BanCardMediaType 源代码里没看到有定义什么重载。
xiaoxiangqing 2018-12-06
  • 打赏
  • 举报
回复
是按位或运算
Csdn技术大神 2018-12-05
  • 打赏
  • 举报
回复
就那样没啥想说的很正常吧
qq_43940926 2018-12-05
  • 打赏
  • 举报
回复
引用 6 楼 以专业开发人员为伍的回复:
如果是 A [二元操作符] B 这类重载,那么c#编译器会要求在 A 或者 B 类型的定义中去定义重载。你到那里去找源代码就行了。
您说的非常好,可以沟通一下吗
  • 打赏
  • 举报
回复
嗯,lz 贴出来的截图中,其实已经将 vs 工具给出的重载运算的及时提醒小窗口显示出来了。
xuzuning 2018-12-05
  • 打赏
  • 举报
回复
BanCardMediaType 是什么类型呢?
最直接的应是 enum(枚举)类型,那么他本身就支持 | 运算,并不需要什么重载(你也看不到他的实现代码,因为他们被包裹在 C# 的内核之中)
难道 1+2 也需要重载 + 吗?
  • 打赏
  • 举报
回复
上述,比如说 gate 表示一个叫做”流程“的东西,用“=>”符号重载来产生规则声明对象,表示一个线索可以转换为下一个线索。而”线索+线索“表示另外一个合并线索。那么6、7种不同种类的对象,用简洁的数学符号,就能表示一个强大的生成器模式。 而一般程序员习惯的什么编程语言哦是,则表现力步枪,比较垃圾。
  • 打赏
  • 举报
回复
好的设计师经常这样写代码
var 线索1 = 人物1 + 时间 + 地点 + 动机1 + 物品1;
var 线索2 = 人物2 + 时间 + 地点 + 动机2 + 物品2;
var 线索3 = 人物3 + 时间 + 地点 + 动机3 + 物品3;
var gate = 线索1 + 线索2 => 线索3;
用简洁的普通文案人员就懂的符号来编写程序,而不是写一大堆只有程序员才关心的程序符号。 所以,运算符重载技术非常重要。
  • 打赏
  • 举报
回复
vs 开发工具实际上已经帮你显示了它的定义。你可以试试这样的代码
using System;
using System.Linq;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var result = new A { S = "张三" } | new B { N = 5 };
            Console.WriteLine($"result.S 结果是 {result.S}");
            Console.WriteLine(".......按任意键退出");
            Console.ReadKey();
        }

    }

    public class A
    {
        public string S;
    }

    public class B
    {
        public int N;

        public static A operator |(A a, B b)
        {
            return new A { S = a.S + b.N.ToString() };
        }
    }
}
然后,把鼠标放到竖线那里,可以看到 vs 的切当的提示。然后点击鼠标右键,选择"查看定义“,你就能转到源代码文件去看了。 要学会使用 vs。
  • 打赏
  • 举报
回复
F12不就能跟踪看源码了吗
张天星 2018-12-04
  • 打赏
  • 举报
回复
按位与赋值。和重载扯不上关系。
threenewbee 2018-12-04
  • 打赏
  • 举报
回复
可能性有限,谁没事重载位逻辑运算符
  • 打赏
  • 举报
回复
如果是 A [二元操作符] B 这类重载,那么c#编译器会要求在 A 或者 B 类型的定义中去定义重载。你到那里去找源代码就行了。
  • 打赏
  • 举报
回复
查看你的 BanCardMediaType 源代码。
游北亮 2018-12-03
  • 打赏
  • 举报
回复
| 就是按位或操作符, 01 | 10 = 11
xuzuning 2018-12-03
  • 打赏
  • 举报
回复
一个赋值语句,就产生那么多联想,真有你的
独立观察员 2018-12-03
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
你是怎么想的?


又好像是按位或
加载更多回复(1)

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧