VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • C#教程之使用接口更改已装箱的值类型中的字段(2)

        Point p = new Point(1, 1);
        Console.WriteLine(p);//显示(1,1)
        p.Change(2, 2);
        Console.WriteLine(p);//显示(2,2)
        object o = p;
        Console.WriteLine(o);//显示(2,2)
        ((Point)o).Change(3, 3);
        Console.WriteLine(o);//显示(2,2)
        Console.ReadKey();

1
2
3
        }
    }
}

  Main在栈上创建一个Point值类型对象并赋值(1,1),第一次调用writeline之前对p进行装箱,writeline会在已装箱的Point上调用ToString,像预期中结果为(1,1)

     p调用Change方法将数值改为2,第二次调用writeline时再次对p进行装箱,像预期结果为(2,2)

     现在p要进行第三次装箱,o将引用已装箱的Point对象,第三次调用writeline会显示(2,2)

  最后希望调用Change来更改已装箱的Point对象中的字段,但是Object o 对Change方法并不知情所以要先将o转型为Point。将o转型为Point要先将o拆箱,并将已装箱中的字段

复制到线程栈上一个临时的Point中。这个临时的Point的m_x,m_y会变成3,3,但是已装箱的Point不受这个Change调用影响,所以第四次显示(2,2)

 

用接口来更改已装箱值类型的字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace 使用接口更改已装箱值类型的字段
{
 
    //接口定义一个Change方法
    internal interface IChageBoxedPoint
    {
        void Change(int x, int y);
    }
    //point是一个值类型
 
    internal struct Point: IChageBoxedPoint
    {
        private Int32 m_x, m_y;
        public Point(Int32 x, Int32 y)
        {
            m_x = x;
            m_y = y;
        }
        public void Change(int x, int y)
        {
            m_x = x;
            m_y = y;
        }
        public override string ToString()
        {
            return string.Format("({0},{1})", m_x, m_y);
            //fromat返回指定字符串中一个或多个格式项替换为指定对象的字符串格式
        }
        class Program
    {
       
        }
        static void Main(string[] args)
        {
            Point p = new Point(1, 1);
            Console.WriteLine(p);//显示(1,1)
            p.Change(2, 2);
            Console.WriteLine(p);//显示(2,2)
            object o = p;
            Console.WriteLine(o);//显示(2,2)
            ((Point)o).Change(3, 3);
            Console.WriteLine(o);//显示(2,2)
            //对p进行装箱,更改已装箱的对象,然后丢弃它;
            ((IChageBoxedPoint)p).Change(4, 4);
            Console.WriteLine(p);//显示(2,2)<br>     //更改已装箱的对象病显示他
            ((IChageBoxedPoint)o).Change(5,5);
            Console.WriteLine(o);//显示(5,5)<br>
        }
    }
}

相关教程
关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号