无法在驱动类的Main方法中调用计算器类的加法方法,尽管我包含了cal.dll

本文关键字:方法 管我 包含 dll cal Main 调用 计算器 | 更新日期: 2023-09-27 18:18:21

这是driver.cs中的驱动类

using System;
public class driver{
public static void Main(){
    int meth;
    calculator obj = new calculator();
    do
    {
        System.Console.WriteLine("1. Addition'n2.Subtraction'n3.Multiplication'n4. Division'n5. Mod'n6. Square Root");
        meth=int.Parse(Console.ReadLine());
        if (meth==1)
        {
            Console.WriteLine("Enter 1st Number=");
            double num1=double.Parse(Console.ReadLine());
            Console.WriteLine("Enter 2st Number=");
            double num2=double.Parse(Console.ReadLine());
            double answer = obj.addition(num1,num2);
        }
    } while (meth!=0);
}}

这是cal.cs

中的计算器类
using System;
public class calculator{
double addition(double x,double y){
return x+y;
}
double subtraction(double x,double y){
return x-y;
}
double multiplication(double x,double y){
return x*y;
}
double division(double x,double y){
return x/y;
}
double mod(double x,double y){
 return x%y;
}
double squareRoot(double x){
return Math.Sqrt(x);
}
}
我已经使用 创建了cal.dll文件。

CSC/target:library cal.cs

然后编译驱动类

CSC/reference:cal.dll driver.cs

一切正常,除了

obj.addition(num1,num2);
在驱动类中

需要帮助的

无法在驱动类的Main方法中调用计算器类的加法方法,尽管我包含了cal.dll

您需要将您的方法设置为public,以便其他类可以访问它们。显然,错误消息不是很描述性-当您尝试从类外部调用非公共方法时,也会给出CS1061。

public double Addition(double x, double y) {
    return x + y;
}

我还建议阅读有关大写的命名约定。

类型的方法默认具有内部保护级别,我只是将public放在每个方法之前,它工作得很好

driver.cs(19.25):错误1061:'calculator'不包含"加法"的定义和不接受扩展方法"加法"可以找到类型为"calculator"的第一个参数

正如Matti Virkkunen已经指出的,这是因为方法是private

通常情况下,如果方法是private,它是在同一个项目的控制台应用程序,你会得到编译时错误:"方法是不可访问的,由于其保护级别"

因为它在另一个项目中,所以它不是不可访问的,但对于控制台应用程序是完全不可见的。

注:您仍然可以使用反射访问您的私有方法:

    static void Main(string[] args)
    {
        calculator calc = new calculator();
        var addition = calc.GetType().GetMethod("addition", System.Reflection.BindingFlags.NonPublic  
                                                          | System.Reflection.BindingFlags.Instance);
        var result = addition.Invoke(calc, new object[] { 5, 10 });
        Console.WriteLine(result);
    }

输出:15