美文网首页
C#参数类型总结

C#参数类型总结

作者: Ginkgo | 来源:发表于2018-02-08 21:25 被阅读34次

图1来自《图解C#》

[图1] image.png
  • ref 和 out
    C#中的ref 和C++中的&运算符功能类似,但又有所不同。ref是传引用。值得注意的是
    ref 和out在声明和使用的时候都必须写关键字。ref传入的参数必须要先赋值,而out则不必。这是这两者主要区别。
  1. 没使用ref之前的输出结果为20 50 20 50
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DrillOne
{
    class Num
    {
        public int var1 = 20;
    }
    class Test
    {
        public void Method(Num num)//这里并没有产生一个对象。只是在栈中产生了一个引用变量。
        {
            num.var1 = 50;
            Console.WriteLine("After change the value: {0}", num.var1);
            num = new Num();
            Console.WriteLine("After creat a object to num : {0}", num.var1);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Test test = new Test();
            Num number = new Num();
            Console.WriteLine("Before call method:{0}", number.var1);
            test.Method(number);
            Console.WriteLine("After call method:{0}", number.var1);
            
        }
    }
}
  • 输出结果为:


    image.png
  1. 使用ref之后的结果为:20 50 20 20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DrillOne
{
    class Num
    {
        public int var1 = 20;
    }
    class Test
    {
        public void Method(ref Num num)//这里并没有产生一个对象。只是在栈中产生了一个引用变量。
        {
            num.var1 = 50;
            Console.WriteLine("After change the value: {0}", num.var1);
            num = new Num();
            Console.WriteLine("After creat a object to num : {0}", num.var1);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Test test = new Test();
            Num number = new Num();
            Console.WriteLine("Before call method:{0}", number.var1);
            test.Method(ref number);
            Console.WriteLine("After call method:{0}", number.var1);
            
        }
    }
}

  • 运行结果为


    image.png
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DrillOne
{
    class Num
    {
        public int var1 = 20;
    }
    class Test
    {
        public void Method(out Num num,out int f1)//这里并没有产生一个对象。只是在栈中产生了一个一个引用变量。
        {
            num = new Num();
            f1 = 50;
            Console.WriteLine("{0}", num);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Test test = new Test();
            Num number;
            int a;
            test.Method(out number, out a);
            Console.WriteLine("{0} {1:c}", number.var1, a);
        }
    }
}
  • 运行结果为:


    image.png

相关文章

  • C#参数类型总结

    图1来自《图解C#》 ref 和 outC#中的ref 和C++中的&运算符功能类似,但又有所不同。ref是传引用...

  • C#参数类型

    一、按值参数传递 默认情况下C#中的参数默认按值传递,这是常用的方式。这意味着在将参数值传递给方法时将创建一份参数...

  • 2018-12-08

    C#知识点部分总结 1、 Console.WriteLine():打印到控制台并换行   2、 C#类型:值类型、...

  • C#与C++类型互转

    一、C#调用DLL文件时参数对应表 二、C#调用C++编写的DLL函数, 以及各种类型的参数传递 如果函数只有传入...

  • 引用类型的参数加不加Ref的区别

    问题描述:引用类型的参数加不加Ref的区别? 解答 备注:C#高级编程(第10版) 3.6.1 ref参数(92页...

  • 参数的 in out in/out 修饰

    知识点 in out in/out IN 一个函数,默认情况下,参数是 in 类型,即传入参数,以C# 中的方法为...

  • C#调用MS SQL存储过程时输出参数小数被舍掉问题

    起因 昨天在项目维护中发现C#调用存储过程时sql输出参数数据类型为numeric(18,4),C#对应Decim...

  • [转]C#进阶系列——WebApi 接口参数不再困惑:传参详解

    转自 懒得安分的 C#进阶系列——WebApi 接口参数不再困惑:传参详解 阅读目录 一、get请求基础类型参数实...

  • C#委托学习笔记

    什么是委托 委托(Delegates)是C#中一种特别的类型,它可以引用具有指定参数类型和返回类型的方法。比如pu...

  • java泛型

    本质:类型参数化 java总结——泛型

网友评论

      本文标题:C#参数类型总结

      本文链接:https://www.haomeiwen.com/subject/cmkxtftx.html