C#调用非静态方法时出现“Cant convert void to object”错误求助
解决你的C#方法调用问题
嘿,我完全懂你的困扰!你说得太对了——不能把无返回值(void)的非静态方法当作有返回值的对象来调用,这就是你遇到错误的根源。而且你说得没错,把实例变量设为public确实是不良实践,完全没必要那么做,咱们换个正确的方式就行!
先理清楚问题:你大概率是写了类似这样的错误调用代码:
// 错误!DisplayDate是void方法,不能当作参数传给Console.WriteLine Console.WriteLine(In1.DisplayDate());
而正确的做法是,直接调用void方法就好,不用把它当作有返回值的表达式来使用。同时,保持你的Date类的封装性(把实例变量设为private),让DisplayDate()方法自己完成输出工作。
给你一个完整的正确实现示例:
Date类的正确封装实现
public class Date { // 把实例变量设为private,符合封装原则 private int _month; private int _day; private int _year; // 构造函数初始化变量 public Date(int month, int day, int year) { _month = month; _day = day; _year = year; } // 无返回值的方法,直接完成输出逻辑 public void DisplayDate() { Console.WriteLine($"{_month}/{_day}/{_year}"); } }
正确调用方式
class DateTest { static void Main(string[] args) { Date In1 = new Date(7, 4, 2004); Date In2 = new Date(11, 1, 2003); // 直接调用void方法,不需要赋值或当作参数传递 In1.DisplayDate(); In2.DisplayDate(); } }
这样一来,你既不用让方法返回值,又保持了类的封装性(外部代码不能随意修改Date的内部变量),完美避开了不良实践。你真的没犯什么低级错误,只是对void方法的调用规则有点混淆而已~
内容的提问来源于stack exchange,提问作者idksoiputthis
相关产品推荐
相关产品推荐

