值传递:对于个人理解,值传递就像是python中的深拷贝,值传递的内容和原来的内容是两份不同的东西,相互不影响。

引用传递:对于个人理解,引用传递就是python中的复杂多维list的浅拷贝,它传递的只是一个内存空间的一种映射,如果你更改引用进来的值,那么将会影响到被引用的值。

Class1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Class1
{
private int age;
public Class1(int age)
{
this.age = age;
}
// age接口
public int Age
{
get
{
return age;
} set
{
age = value;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Class1 age = new Class1();
//Growth(age); // 调用静态方法,对象的++,会使对象年龄变为4
Growth(age.Age); // 整型的++,年龄虽然加到了4,但是没有输出使用,对象的年龄仍然为3
Console.WriteLine(age.Age); // 重新输出年龄的大小
}
// 定义静态方法,访问的时候不需要进行实例化
// 该static使用的是对象类型的++,相当于引用类型
static void Growth(Class1 child)
{
child.Age++;
Console.WriteLine("又长大一岁!!!");
}
// 该static是int类型的++,相当于值类型
static void Growth(int age)
{
age++;
Console.WriteLine("int又长大一岁!!!");
}
}
}

值类型有byte,short,int,long,float,double,decimal,char,bool,enum和struct。值类型的值会直接存放在栈中;

引用类型有array,interface,string和object。引用类型在栈中存放的是引用,而引用的指向实际存放的堆。

相同的是值类型和引用类型继承的都是System.Object类,而不相同的是值类型继承System.Object类的子类System.ValueType类。

(详细可以看:https://blog.csdn.net/qiaoquan3/article/details/51202926#comments)

(练习可以看:https://www.oschina.net/code/snippet_188227_9009#14426)

值类型总是一个值;引用类型可以是null,表示不包含值。但是,值类型可以使用可空类型(泛型的一种),使值类型在这个方面可以像引用类型一样使其为null。

C# 值传参和引用传参的更多相关文章

  1. [ 随手记6 ] C/C++ 形参、实参、按值传参、指针传参、引用传参

    个人原创: 1. 形参:形式上的参数,一般多在函数声明.函数定义的参数上: 2. 实参:实体参数,有实际的值,在运算上被循环使用的值: 3. 按值传参:按值,就是把实际的值传给函数内部: 4. 指针传 ...

  2. Go 到底有没有引用传参(对比 C++ )

    Go 到底有没有引用传参(对比 C++ ) C++ 中三种参数传递方式 值传递: 最常见的一种传参方式,函数的形参是实参的拷贝,函数中改变形参不会影响到函数外部的形参.一般是函数内部修改参数而又不希望 ...

  3. Python中的引用传参

    Python中函数参数是引用传递(注意不是值传递).对于不可变类型,因变量不能修改,所以运算不会影响到变量自身:而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量. 引用传参一: >& ...

  4. &符号 (弃用引用传参了,不要用!!)

    写法一 $age = function grow($age) { $age += ; return $age; } echo grow($age) echo $age 写法二 $age = funct ...

  5. Java中的new关键字和引用传参

    先看看Java中如何使用new关键字创建一个对象的. [java] view plain copy public class Student { public String name; public  ...

  6. C++二级指针和指针引用传参

    前提 一级指针和引用 已经清晰一级指针和引用. 可参考:指针和引用与及指针常量和常量指针 或查阅其他资料. 一级指针和二级指针 个人觉得文字描述比较难读懂,直接看代码运行结果分析好些,如果想看文字分析 ...

  7. Apache ab测试工具使用方法(无参、get传参、post传参)(转)

    转自Apache ab测试工具使用方法(无参.get传参.post传参) Ab测试工具是apache自带的测试工具,具有简单易上手的特性,下面我总结一下我的使用方法,首先去官方下载apache程序包, ...

  8. python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参

    1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...

  9. SpringCloud:feign对象传参和普通传参及遇到的坑

    对象传参: #使用@RequestBody来指定传参对象 @RequestMapping(value = "/v2/matterCode/genCode", method = Re ...

随机推荐

  1. shell脚本实例-脚本批量创建用户

    #!/usr/bin/bash read -p "Please input number: " num if [[ ! "$num" =~ ^[0-9]+$ | ...

  2. Beta阶段冲刺---Day5

    一.Daily Scrum Meeting照片 二.今天冲刺情况反馈 昨天已完成的工作: (1)闯关模式界面设计: (2)主界面做了相应修改: (3)RankActivity修改. (4)RANKli ...

  3. GIL 相关 和进程池

    #GIL (global interpreter Lock) #全局解释器锁 :锁是为了避免资源竞争造成数据错乱 #当一个py启动后 会先执行主线程中的代码#在以上代码中有启动了子线程 子线程的任务还 ...

  4. Day1作业及默写

    1.简述变量命名规范 变量由字母, 数字,下划线搭配组合而成 不可以⽤数字开头,更不不能是全数字 不能是pythond的关键字, 这些符号和字母已经被python占⽤, 不可以更改 不要⽤中文 名字要 ...

  5. 关于方法中的self参数和全局变

    先摆样例程序,自己想想执行结果是怎样的:如果注释掉global va后,执行的结果又会如何?同时注释掉global va和va = [value]+va两行呢? #a.py va = ['va1',' ...

  6. 获取页面元素的css属性

    function getStyle(obj, name){    if(obj.currentStyle)    {         return obj.currentStyle[name];//兼 ...

  7. 1--Selenium环境准备--Eclipse 添加Testng插件

    Eclipse安装TestNG TestNG官网地址:http://testng.org/ 1.离线安装TestNG插件: 受网络等因素影响,在线安装方式速度比较慢,可以通过如下方式离线安装TestN ...

  8. 16 多校 8 Ball (贪心排序)很巧妙的思路啊~

    ZZX has a sequence of boxes numbered 1,2,...,n1,2,...,n. Each box can contain at most one ball. You ...

  9. 获取Map的key和value的两种方法

    //使用迭代器,获取key; /*Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext()){ Strin ...

  10. JAVA个人小程序GUI篇-收银(标签、按钮、复选框、下拉标、文本域、表格······)

    如果用eclipse需先装载windowsbuild //导入包 import java.awt.BorderLayout; import java.awt.EventQueue; import ja ...