值类型 引用类型 和特殊的引用类型string

值类型:
c#中,值类型继承自System.ValueType:

bool, byte, char, decimal, double, enum, float, int, long, sbyte, short, struct, uint, ulong, ushort

引用类型:
而引用类型则有:

class, interface, delegate, object, string

 

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    
class Person
    {
        
public int Blood = 10;
    }

    
class Program
    {
        
public static void Add(int x)
        {
            x 
+= 10;
            Console.WriteLine(
"值类型当参数被传递并修改之后:" + x);
        }

        
public static void Add(Person person)
        {
            person.Blood 
+= 10;
            Console.WriteLine(
"引用类型当参数被传递并修改之后:" + person.Blood);
        }

        
public static void Add(string x)
        {
             x 
= "def";
            Console.WriteLine(
"string当参数被传递并修改之后:" + x);
        }


        
static void Main(string[] args)
        {
            
//string特殊的应用类型
            string a = "abc";
            Console.WriteLine(
"a的原值:" + a);
            Add(a);
            Console.WriteLine(
"但是a的值并没有因为函数的修改而修改:" + a);


            
//值类型变量
            int i = 10;

            Console.WriteLine(
"i的原值:" + i);
            Add(i);
            Console.WriteLine(
"但是i的值并没有因为函数的修改而修改:" + i);

            
//引用类型变量
            Person person = new Person();

            Console.WriteLine(
"Blood的原值:" + person.Blood);
            Add(person);
            Console.WriteLine(
"但是Blood的值因为函数的修改而修改:" + person.Blood);

            
//值类型和引用类型的区别,就在于当函数参数传递的时候.
            
//值类型是把自己的值复制一份传递给别的函数操作.无论复制的值怎么被改变.其自身的值是不会改变的
            
//而引用类型是把自己的内存地址传递给别的函数操作.操作的就是引用类型值的本身.所以值被函数改变了.
            
//这就是传值和传址的区别

            Console.ReadLine();
        }
    }

 

 

 

a的原值:abc
string当参数被传递并修改之后:def
但是a的值并没有因为函数的修改而修改:abc
i的原值:10
值类型当参数被传递并修改之后:20
但是i的值并没有因为函数的修改而修改:10
Blood的原值:10
引用类型当参数被传递并修改之后:20
但是Blood的值因为函数的修改而修改:20

posted @ 2010-01-04 10:51  KissFly  Views(510)  Comments(0)    收藏  举报