惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
Security Latest
Security Latest
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
GbyAI
GbyAI
L
LINUX DO - 最新话题
A
Arctic Wolf
T
Tor Project blog
G
GRAHAM CLULEY
I
InfoQ
博客园_首页
IT之家
IT之家
The Register - Security
The Register - Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
U
Unit 42
PCI Perspectives
PCI Perspectives
量子位
P
Palo Alto Networks Blog
S
Securelist
T
Troy Hunt's Blog
博客园 - 【当耐特】
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
罗磊的独立博客
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
NISL@THU
NISL@THU
C
Cisco Blogs
T
Threatpost
有赞技术团队
有赞技术团队
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
T
The Exploit Database - CXSecurity.com
Cloudbric
Cloudbric
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security

博客园 - shuang

heart or house? Dos for -- by 随风 - shuang C--Pointer Raid -----asp web 报表 - shuang ----[创业指南]给海归技术创业兄弟的九个忠告 --设计模式--Hibernate about avast job desc 把INT转换成2进制等 private/实现有多个相同方法的接口 struct也有方法成员 virtual 集成资源文件 const -readonly- static readonly 脚本---用函数模拟类 csm2 ClientScriptManager html______1
使用接口改变已经装箱的值类型的字段
shuang · 2007-12-20 · via 博客园 - shuang

使用接口改变已经装箱的值类型的字段

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

namespace App1
{
    
struct Point
    
{
        
public Int32 x, y;
        
public void Change(Int32 x, Int32 y)
        
{
            
this.x = x;
            
this.y = y;
        }

        
public override string ToString()
        
{
            
//return base.ToString();
            return string.Format("{0},{1}", x, y);
            
//return string.Format("{0},{1},{2}", x, y, x);
        }

    }

    
class Program
    
{
        
static void Main(string[] args)
        
{
            Point p 
= new Point();
            p.x 
= p.y = 1;
            Console.WriteLine(p);
            
//调用p的ToString()方法,若不override---ToString()则输出"App1.Point"
            ///////////////////////////
            p.Change(22);
            Console.WriteLine(p);
            
///////////////////////////
            object o = p;//p装箱
            Console.WriteLine(o);//o指向装箱后的p---(2,2)
            //////////////////////////
            ((Point)o).Change(3, 3);//把o拆箱到临时栈上,并在临时栈上改变Point的值成(3,3)
            Console.WriteLine(o);//输出原来o指向的对象的值:(2,2)
            Console.Read();
        }

    }

}

****************************************

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

namespace App1
{
    
interface IChangeBoxedPoint
    
{
        
void Change(Int32 x, Int32 y);
    }

    
struct Point:IChangeBoxedPoint
    
{
        
public Int32 x, y;
        
//现在该Change方法成了实现的接口的方法
        public void Change(Int32 x, Int32 y)
        
{
            
this.x = x;
            
this.y = y;
        }

        
public override string ToString()
        
{
            
//return base.ToString();
            return string.Format("{0},{1}", x, y);
            
//return string.Format("{0},{1},{2}", x, y, x);
        }

    }

    
class Program
    
{
        
static void Main(string[] args)
        
{
            Point p 
= new Point();
            p.x 
= p.y = 1;
            Console.WriteLine(p);
            
//调用p的ToString()方法,若不override---ToString()则输出"App1.Point"
            ///////////////////////////
            p.Change(22);
            Console.WriteLine(p);
            
///////////////////////////
            object o = p;//p装箱
           
            Console.WriteLine(o);
//o指向装箱后的p---(2,2)
            //////////////////////////
            ((Point)o).Change(33);//把o拆箱到临时栈上,并在临时栈上改变Point的值成(3,3)
            Console.WriteLine(o);//输出原来o指向的对象的值:(2,2)
            ///////////////////////////
            ((IChangeBoxedPoint)p).Change(4,4);//把p装箱,改变已装箱对象,随后将之丢弃
            Console.WriteLine(p);//输出p(2,2)
            //////////////////////////
            ((IChangeBoxedPoint)o).Change(5, 5);//这里o本身即是已装箱的对象,把它改变
            Console.WriteLine(o);//输出刚刚被改变的o(5,5)

            Console.Read();
        }

    }

}