概述
C#--方法
1、访问修饰符(Access Modifier)
- public: 可以被任意调用。
- protected: 可以被内部类(containing class)和派生类(derived class)调用。
- internal: 只可以被当前assembly的所有成员调用。
- protected internal: 不仅可以被当前assembly的所有成员调用,还允许任意assembly中内部类(containing class)的派生类(derived class)调用。
- private(default): 只可以被内部类(containing class)调用。
2、参数(Parameters)
- 按值传递(value parameters)按值传递的变量可以是值类型或者引用类型,理解这一点很重要。这就意味着存在按值传递引用类型变量(Using a Value Parameter to Modify a Reference Type)和按值传递值类型变量(Using a Value Parameter to Modify a Value Type)两种情况,代码示例如下:
using System; namespace MyApp { class Program { static void Main(string[] args) { int number= 0; Good mygood = new Good(200,"Watch"); Console.WriteLine("Price = {0},Name = {1},number = {2}", mygood.Price, mygood.Name,number); test(mygood, number); Console.WriteLine("Price = {0},Name = {1},number = {2}", mygood.Price, mygood.Name, number); Console.ReadLine(); } static void test(Good good,int num) { good.Price = 500; good.Name = "Phone"; num = 5; Console.WriteLine("Price = {0},Name = {1},number = {2}",good.Price,good.Name,num); } } class Good { int price; string name; public Good(int p,string n) { price = p; name = n; } public int Price { get { return price; } set { price = value; } } public string Name { get { return name; } set { name = value; } } } }
- 运行结果:
-
-
Price = 200,Name = Watch,number = 0Price = 500,Name = Phone,number = 5Price = 500,Name = Phone,number = 0
- 结果分析: test函数分别按值传递引用类型的Good变量和值类型的number变量。test函数good和主函数的mygood虽然是两个不同的变量,但引用的是同一个Good实例。因此利用good改变实例的字段之后,mygood访问得到的必然也是变化后的实例。number和num是两个不同的值类型的变量,对值类型的变量修改只修改自身的内容。
-
- 按引用传递(reference parameters)同理,按引用传递也分为按引用传递引用类型变量(Using a Reference Parameter to Modify a Reference Type)和按引用传递值类型变量(Using a Reference Parameter to Modify a Value Type),代码示例如下:
<span style="color:#330099;">class Program { static void Main(string[] args) { int number= 0; Good mygood = new Good(200,"Watch"); Console.WriteLine("Orignal data:"); Console.WriteLine("Price = {0},Name = {1},number = {2}", mygood.Price, mygood.Name,number); test_ref(ref mygood, ref number); Console.WriteLine("Price = {0},Name = {1},number = {2}", mygood.Price, mygood.Name,number); test_val(mygood, number); Console.WriteLine("Price = {0},Name = {1},number = {2}", mygood.Price, mygood.Name, number); Console.ReadLine(); } static void test_ref(ref Good good,ref int num) { good = new Good(100, "Phone"); num = 5; Console.WriteLine("after test_ref:"); Console.WriteLine("good.Price = {0},good.Name = {1},num={2}",good.Price,good.Name,num); } static void test_val(Good good, int num) { good = new Good(50, "Television"); num = 10; Console.WriteLine("after test_val:"); Console.WriteLine("good.Price = {0},good.Name = {1},num={2}", good.Price, good.Name,num); } }</span>
- 运行结果:
- Orignal data:
Price = 200,Name = Watch,number = 0
after test_ref:
good.Price = 100,good.Name = Phone,num=5
Price = 100,Name = Phone,number = 5
after test_val:
good.Price = 50,good.Name = Television,num=10
Price = 100,Name = Phone,number = 5
- 结果分析:
- test_ref(ref mygood,ref number),good是mygood的引用,而mygood是Good实例的引用,对good重新赋值就相当于对mygood赋值,会改变原Good实例。而test_val(mygood,number),good和mygood两个不同的Good型引用,对二者进行赋值操作不会相互影响。(注意:这里的赋值指的是对引用赋值,与通过引用对字段赋值是不同的)。
最后
以上就是心灵美曲奇为你收集整理的C#按值传递和按引用传递C#--方法的全部内容,希望文章能够帮你解决C#按值传递和按引用传递C#--方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复