无法在驱动类的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);
在驱动类中需要帮助的
您需要将您的方法设置为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