c# - 为什么在进行运算符重载时不能在类中使用 print 函数?
问题描述
我没有收到任何错误。我是在想。为什么当我输入“no4.Print();”时它不起作用。类不是已经创建了吗?
我正在学习运算符重载。我注意到它仅在我使用 Console.WriteLine 函数时才有效。如果我尝试在类中使用 Print 函数,则会出错。
using System;
class Number{
private int myNumber;
public Number(int myNumber){
this.myNumber=myNumber;
}
public static Number operator *(Number a, Number b){
return new Number(a.myNumber*b.myNumber);
}
public void Print(){
Console.WriteLine(this.myNumber);
}
public static implicit operator int(Number a) {
return a.myNumber;
}
public static implicit operator Number(int a) {
return new Number(a);
}
}
class HelloWorld {
static void Main() {
Number no1 = new Number(5);
Number no2 = new Number(2);
Number no3 = no1*no2;
no3.Print();
int no4 = new Number(1312);
Console.WriteLine(no4); //It doesnt work no4.Print();
Number no5 = 2121;
no5.Print();
}
}
解决方案
你不能调用no4.Print();
,因为int
类型/类没有这样的方法。此外,没有人告诉变量转换为Number
对象。但是,当您编写类似
((Number)no4).Print();
在定义的运算符的帮助下,您正在将int
值显式转换为对象。Number
implicit operator Number(int a)
推荐阅读
- xsl-fo - XSL-FO:具有背景颜色的空内联块
- r - 为什么我不能下载 tidycensus?
- python - python中是否有通配符
- orbeon - 如何在 orbeon 中的所有表单上填充对话框
- docker - Keycloak 可与 docker compose 一起使用,但不能通过单个容器
- python - 通过python代码在docx文件中查找红色单词
- azure - 克服 Azure 应用程序网关上的 40 个前端端口限制
- java - 可以将@Component 用于任何实用程序类吗?
- ios - 如何使用 Swift 中的自动生成键从情节提要中设置的 UITextView 中检索文本?
- android - 有没有办法在 Android 10+ 中强制 Wi-Fi 重新连接/断开连接?