不错的quiz

 

using  System;
using  System.Collections.Generic;

namespace  abcd
{
    
class Program
    
{
        S s;
        
struct S
        
{
            
public int x; //public int x = 0 编译错误?解释为什么
        }


        C c 
= new C();
        
class C
        
{
            
public int x = 0;
        }
        
        
        
void print()
        
{
            Console.WriteLine(
"{0}/t{1}", s.x, c.x);
        }


        
void Foo1(S s, C c)
        
{
            s.x
++;
            c.x
++;
            print();
        }


        
void Foo2(S s, C c)
        
{
            s 
= new S();
            c 
= new C();
            print();
        }


        
void Foo3(ref S s, ref C c)
        
{
            s.x
++;
            c.x
++;
            print();
        }


        
void Foo4(ref S s, ref C c)
        
{
            s 
= new S();
            c 
= new C();
            print();
        }
       

        
void Test()
        
{
            Foo1(s, c);
            Foo2(s, c);
            Foo3(
ref s, ref c);
            Foo4(
ref s, ref c);
            
// 输出结果,解释为什么:
            
// 0    1
            
// 0    1
            
// 1    2
            
// 0    0

            List
<S> l1 = new List<S>();
            l1.Add(s);
            
//l1[0].x++; 编译错误?解释为什么

            S[] l 
= new S[1];
            l[
0= new S();
            l[
0].x++;
            
// 数组OK,解释为什么

            List
<C> l2 = new List<C>();
            l2.Add(c);
            l2[
0].x++;
            
// OK,解释为什么
        }


        
static void Main()
        
{
            
new Program().Test();
        }
       
    }

}


解释每一个为什么,并且画出对象在内存中的布局变化图!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值