现在的位置: 首页 > 综合 > 正文

c# ref out 的使用

2018年04月05日 ⁄ 综合 ⁄ 共 1473字 ⁄ 字号 评论关闭

在网上看了一些,些个小例子来说明下,大家就明白了。

c#的类型分为两种:值类型和引用类型:

值类型: 简单类型(包括int, long, double等)和结构(structs)都是值类型

引用类型:除了值类型以外的都是引用类型。

 

下面就两种类型的使用的作为参数传递的不同:

 

对于值类型:

  如果不使用ref/out :则就是普通的值传递,在c,c++中类似比较普遍。

  如果使用Ref/out ,则是按照引用传递,也就是说传递的是参数的引用,有点类型于c,c++中的指针变量。这样的话,在子函数中修改会改变被传入作为参数的值。

 

对于引用类型:

  如果不使用ref/out,那么实际上也是拷贝传递,但是注意,由于引用类型本身的就是一个对象的引用,这样传递的结果就是传入的参数在传入的时候,拷贝生成一个引用,这个引用也是指向参数引用指向的对象的。也就意味着两个引用指向同一个对象。

  如果使用Ref/out,那么实际上传递的是参数的引用,有点类型于c++中的指针的指针。很明显,实际上,还是同一个引用指向一个对象。

下面是一个简单的代码,可以解释在ref /out 引用类型的时候的是不同的:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            offbitmap = RefOut_Sample.Properties.Resources._1;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SetBitmap(offbitmap);
            if (offbitmap != null)
            {
                MessageBox.Show("No Null");
            }
            else
            {
                MessageBox.Show("NULL");
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            SetRefBitmap(ref offbitmap);
            if (offbitmap != null)
            {
                MessageBox.Show("No Null");
            }
            else
            {
                MessageBox.Show("NULL");
            }

        }

        private Bitmap offbitmap = null;

        private void SetBitmap(Bitmap bitmap)
        {
            bitmap = null;
        }
        private void SetRefBitmap(ref Bitmap bitmap)
        {
            bitmap = null;
        }

    }

 

我们两个打开,每次指向一次Button1,button2,可以看出得到的结果是不一样的。两种的不同,分别是使用在不同的时候。

 

 

【上篇】
【下篇】

抱歉!评论已关闭.