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();
}
}
}
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();
}
}
}
解释每一个为什么,并且画出对象在内存中的布局变化图!