一般来说,作为一个C#程序员,方法调用是最基础的一个东西,很悲剧的是每次我都漏了一些东西,所以写下这篇博客,方便大家参考,同时也给自己长点记性。
首先,我们要注意几个关键词,即访问修饰符,这很重要。
只有在同一程序集的文件中,内部类型或成员才是可访问的,意思就是不对外开放,只能自己内部类访问,不能私有公开化
私有访问是允许的最低访问级别。 私有成员只有在声明它们的类和结构体中才是可访问的,也是不对外开放,但是可以私有公开化
受保护成员在其所在的类中可由派生类实例访问,这个权限更高一些,成员可以被派生类继承使用,但不能被外部类使用。
public公共访问是允许的最高访问级别。 对访问公共成员没有限制,即无论是谁,都可以访问。
可能大家对私有公开化不大了解,我利用官网例子给大家解释下,Employee 类包含两个私有数据成员 name 和 salary。 作为私有成员,它们只能通过成员方法来访问。 添加名为 GetName 和 Salary 通过公共方法访问 name 成员,而通过公共只读属性访问salary
class Employee2
{
private string name = "FirstName, LastName";
private double salary = 100.0;
public string GetName()
{
return name;
}
public double Salary
{
get { return salary; }
}
}
class PrivateTest
{
static void Main()
{
Employee2 e = new Employee2();
// The data members are inaccessible (private), so
// they can't be accessed like this:
// string n = e.name;
// double s = e.salary;
// 'name' is indirectly accessed via method:
string n = e.GetName();
// 'salary' is indirectly accessed via property
double s = e.Salary;
}
}
前面做了那么多铺垫,学习起来就很简单了,首先,从最简单的说起,同一个类之间的方法调用,大家看见只要在第2个方法里面直接调用就行了,这个是最简单的方法调用。
public class Class1
{
private void HellWord()
{
Console.WriteLine("Hello Word");
}
public void sb()
{
HellWord();
}
}
然后,就是同一项目中不同类之间的调用了,这里有个大家都很容易犯的错,那就是
非静态调用必须要创建对象才能访问,否则调用不了,我经常忘记这个。
public class Class1
{
private void HellWord()
{
Console.WriteLine("Hello Word");
}
public void sb()
{
Console.WriteLine("Hello Word");
}
public static void sa()
{
Console.WriteLine("Hello Word");
}
}
public class CLass2
{
public void sb()
{
Class1.sa(); //即使在不同的类中,静态方法也可以直接调用,但是比较耗费资源
Class1 obj = new Class1(); //非静态方法,就必须要创建对象才能访问
obj.sb();
}
}
最后就是不同项目之间方法的调用了。首先,我们创建一个名为BLL的窗体程序,具体是,然后再点击解决方案,添加-新建项目,选择类库,命名为DAL。在里面添加如下代码:
namespace DAL
{
public class Class1
{
public int jiafa(int a,int b)
{
return a+b;
}
public static void HelloWord()
{
Console.WriteLine("Hello Word");
}
}
public class Class2
{
public static void sa()
{
Console.WriteLine("Hello Word");
}
}
}
然后,就是关键的了,右击BLL项目选择添加引用,在引用界面,选择项目,找到DAL并添加,即完成了对DAL项目的引用,在然后在BLL的项目代码中,添加命名空间 using DAL; 下面是我的BLL项目的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DAL;
namespace BLL
{
public class Class1
{
DAL.Class1 o = new DAL.Class1();//非静态方法,需要创建对象,进行引用
public void qw()
{
int a = o.jiafa(1, 3);
DAL.Class1.HelloWord();//静态方法可以直接调用 非静态方法需要引用对象
}
}
}
有关C#的方法调用,暂时就说到这里了,有什么不当之处,欢迎大家的指正。