我是靠谱客的博主 心灵美曲奇,最近开发中收集的这篇文章主要介绍C#按值传递和按引用传递C#--方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 = 0
      Price = 500,Name = Phone,number = 5
      Price = 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#--方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部