C#基础-1:访问控制符、静态与非静态、参数传递
来源:互联网 发布:刚玉的优化处理方法 编辑:程序博客网 时间:2024/06/05 16:14
c#的访问控制符有五种:
1.public:公有的,被修饰的类成员是可以被任何外部类访问的。
2.private:私有的,被修饰的类成员只能在类内部访问或者调用。私有的类成员变量只能由类内部的方法访问,私有的类方法只能在类内部被调用,而该类的实例也无法调用私有的类方法。
3.protected:受保护的,protected修饰的类成员只能由该类的子类访问,便于实现继承。
4.internal:内部的,internal与public相似,但是internal的范围要小于public。internal修饰的类成员只能在该应用程序内被任意的外部类访问。
5.protected internal:受保护内部的,就是在同一个应用程序内部,被修饰的类成员只能由应用程序内的该类的子类进行访问,同样是为了继承的实现方便。
PS:
还有一种访问控制符,那就是不写,默认就是private的了。
c#的以及静态成员和非静态成员,静态方法和非静态方法
- 静态成员是类公有的,无论创建多少个该类的实例,其静态成员在内存都只有一个。对于该类的所有实例,类的静态成员在内存中都只占同一块存储区域。
- 非静态成员是属于类的实例的,每创建一个类的实例就会在内存中为类的非静态成员分配存储。
- 静态方法属于类所有,在类进行实例化前就可以调用;静态方法只能访问静态成员,非静态方法可以访问类的任何成员;因为类的静态方法在类实例化前就可以调用,但是非静态成员需要在类实例化后才能分配内存,所以静态方法无法访问非静态成员。
- 由于静态方法属于类,而不是属于类的实例,所以静态方法中不能使用this了。
c#的参数传递
参数传递的参数分为三种:
1.值参数:
这是参数传递的默认方式。在这种方式下,当调用一个方法时,会为每个值参数创建一个新的存储位置。实际参数的值会复制给形参,实参和形参使用的是两个不同内存中的值。所以,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。
namespace MyTestApplication{ class Program { public void swap(int x, int y) { int temp; temp = x; x = y; y = temp; } } class TestProgram { static void Main(string[] args) { int a = 100; int b = 50; Console.WriteLine("互换前a的值是{0},b的值是{1}", a, b); Program p = new Program(); p.swap(a, b); Console.WriteLine("互换后a的值是{0},b的值是{1}", a, b); } }}
控制台显示结果:
互换前a的值是100,b的值是50
互换后a的值是100,b的值是50
2.引用参数:
引用参数是一个对变量的内存位置的引用。当按引用传递参数时,与值参数不同的是,它不会为这些参数创建一个新的存储位置。引用参数表示与提供给方法的实际参数具有相同的内存位置。
namespace MyTestApplication{ class Program { public void swap(ref int x,ref int y) { int temp; temp = x; x = y; y = temp; } } class TestProgram { static void Main(string[] args) { int a = 100; int b = 50; Console.WriteLine("互换前a的值是{0},b的值是{1}", a, b); Program p = new Program(); p.swap(ref a, ref b); Console.WriteLine("互换后a的值是{0},b的值是{1}", a, b); } }}
控制台输出结果是:
互换前a的值是100,b的值是50
互换后a的值是50,b的值是100
3.输出参数:
return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回多个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。
namespace MyTestApplication{ class Program { public void swap(out int x,out int y) { x = 150; y = 200; } } class TestProgram { static void Main(string[] args) { int a = 100; int b = 50; Console.WriteLine("处理前a的值是{0},b的值是{1}", a, b); Program p = new Program(); p.swap(out a, out b); Console.WriteLine("处理后a的值是{0},b的值是{1}", a, b); } }}
控制台输出结果是:
处理前a的值是100,b的值是50
处理后a的值是150,b的值是200
- C#基础-1:访问控制符、静态与非静态、参数传递
- C#控制台基础 调用非静态类的静态方法与非静态方法
- C#静态方法与非静态方法
- C#中静态与非静态方法
- C#静态与非静态比较
- 静态与非静态
- 静态与非静态
- C#静态字段与非静态字段(静态方法与非静态方法与之类似)
- 基础-函数-静态方法、非静态方法、静态成员、非静态成员与多线程
- c#中静态成员与非静态成员的调用
- C#静态方法与非静态方法的比较
- C#静态方法与非静态方法的比较(转)
- C#静态方法与非静态方法的比较
- C#中静态成员与非静态成员
- C#静态方法与非静态方法的比较
- C#中静态与非静态方法比较
- C#静态方法与非静态方法的区别
- 详解C#中静态与非静态方法比较
- HDU 5493 Queue 线段树
- python 利用openpyxl包处理excel数据并作图
- 图片打碎还原效果
- -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -webkit-font-smoothing: antialiased
- HDU 1212 Big Number (大数取模)
- C#基础-1:访问控制符、静态与非静态、参数传递
- android反编译
- oracle 11.2.0.4 physical standby failover
- 图的遍历
- 【记录】详解HTTP GET请求
- 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- POJ 1258 Agri-Net (最小生成树/Prim)
- Spring MVC 急速集成 Shiro 实录
- Java webSocket 网页聊天室