Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在驱动程序类的主方法中调用计算器类的加法方法,尽管我包含了cal.dll_C#_.net - Fatal编程技术网

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

C# 无法在驱动程序类的主方法中调用计算器类的加法方法,尽管我包含了cal.dll,c#,.net,C#,.net,这是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.

这是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/目标:图书馆cal.cs

然后编译驱动程序类

CSC/reference:cal.dll 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);
}}
除了机器外,一切正常

obj.addition(num1,num2);
驾驶舱
需要帮助

您需要公开您的方法,以便从其他类访问它们。显然,错误消息不是很具有描述性——当您试图从类外部调用非公共方法时,也会给出CS1061

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

我还建议您阅读。

默认情况下,类型的Metohds具有内部保护级别,我刚刚将其置于每个方法之前,它工作正常

cs(19.25):错误1061:“计算器”不包含 “添加”和无扩展方法“添加”的定义 找不到类型为“calculator”的第一个参数 正如Matti Virkkunen已经指出的,这是因为方法是私有的

通常,如果方法是
private
,并且它与console应用程序位于同一个项目中,您将得到编译时错误:“由于其保护级别,方法不可访问”

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

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

    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

你说一切正常是什么意思?这行代码有什么错误?错误是从Main方法调用cal类的加法函数,请阅读说明,这就是我写这行代码的原因。不,这不是@o_weisman的意思。编译器不会只说“有错误”,它还会给你错误的描述。您忘记阅读和/或粘贴它。driver.cs(19.25):错误1061:“calculator”不包含“addition”的定义,并且找不到接受类型为“calculator”的第一个参数的扩展方法“addition”。编译器说calculator类没有方法加法错误CS1061我很确定这不是您收到的错误消息,除非您忘记重新编译很明显,错误信息不是很具有描述性。解决方案仍然正确。driver.cs(19.25):错误1061:“calculator”不包含“addition”的定义,并且找不到接受类型为“calculator”的第一个参数的扩展方法“addition”