首页 > 解决方案 > 为什么在进行运算符重载时不能在类中使用 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();
}
}

标签: c#

解决方案


你不能调用no4.Print();,因为int类型/类没有这样的方法。此外,没有人告诉变量转换为Number对象。但是,当您编写类似

((Number)no4).Print();

在定义的运算符的帮助下,您正在将int值显式转换为对象。Numberimplicit operator Number(int a)


推荐阅读