public static void Usage() { // test ints (struct type) out of order // initialize RefArray <int> e = new RefArray <int>(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); // reference e out of order RefArray <int> f = new RefArray <int>(new Ref_T <int>[] { e.data[8], e.data[6], e.data[4], e.data[2], e.data[0], e.data[9], e.data[7], e.data[5], e.data[3], e.data[1] }); Debug.WriteLine("Initial: "); Debug.WriteLine("e: [" + e + "]"); Debug.WriteLine("f: [" + f + "]\r\n"); e[3] = 1111; Debug.WriteLine("e[3] = 1111;"); Debug.WriteLine("e: [" + e + "]"); Debug.WriteLine("f: [" + f + "]\r\n"); f[3] = 2222; Debug.WriteLine("f[3] = 2222;"); Debug.WriteLine("e: [" + e + "]"); Debug.WriteLine("f: [" + f + "]\r\n"); f[3] = e[3] + 3333; Debug.WriteLine("f[3] = e[3] + 3333;"); Debug.WriteLine("e: [" + e + "]"); Debug.WriteLine("f: [" + f + "]\r\n"); Array.Reverse(f); Debug.WriteLine("Array.Reverse(f);"); Debug.WriteLine("e: [" + e + "]"); Debug.WriteLine("f: [" + f + "]\r\n"); }
public static void Main(string[] args) { StructArray <int> a = new StructArray <int>(3); a.Array[0] = 0; a.Array[1] = 1; a.Array[2] = 2; RefArray <StructArray <double> > b = new RefArray <StructArray <double> >(3); b.Array[0] = new StructArray <double>(5); b.Array[1] = new StructArray <double>(10); b.Array[2] = new StructArray <double>(1005); BaseArray <Base> c = new BaseArray <Base>(3); c.Array[0] = new Base(); c.Array[1] = new Derived(); c.Array[2] = CreateInstance <Base>(); BaseArray <Derived> d = new BaseArray <Derived>(3); d.Array[0] = new Derived(); d.Array[1] = CreateInstance <Derived>(); d.Array[2] = CreateInstance <Derived>(); BaseArray <Derived> e = new BaseArray <Derived>(3); e.CopyArray <Derived>(d.Array); }
static void Main() { const int N = 3; var a0 = new Point[N]; var a1 = new RefArray <Point>(0, N); var a2 = new GetSetArray <Point>(0, N); a0[0].X = 1; // OK。配列のインデクサーは実は参照になってる a1[0].X = 1; // OK。配列と同列! //a2[0].X = 1; // ↑これだとエラー。 // getの戻り値(コピー品)を書き換えようとしてるので、右辺値書き換え(やっちゃダメ)になる // ↓こう書かないとダメ。 var p = a2[0]; p.X = 1; // X だけ(4バイト)書き換えてるように見えて a2[0] = p; // Point 全体(12バイト)の読み書きが発生 System.Console.WriteLine(a0[0]); System.Console.WriteLine(a1[0]); System.Console.WriteLine(a2[0]); }
static void Main(string[] args) { #region 값 형식, 참조 형식 제약조건 StructArray <int> a = new StructArray <int>(3); // T는 값 형식이어야 한다. a.Array[0] = 0; a.Array[1] = 1; a.Array[2] = 2; //StructArray<string> s = new StructArray<string>(3); // error RefArray <StructArray <double> > b = new RefArray <StructArray <double> >(3); b.Array[0] = new StructArray <double>(5); b.Array[1] = new StructArray <double>(10); b.Array[2] = new StructArray <double>(15); //RefArray<int> i = new RefArray<int>(3); // error #endregion BaseArray <Base> c = new BaseArray <Base>(3); c.Array[0] = new Base(); c.Array[1] = new Derived(); c.Array[2] = CreateInstance <Base>(); BaseArray <Derived> d = new BaseArray <Derived>(2); d.Array[0] = new Derived(); // Base 형식은 여기에 할달 할 수 없다. d.Array[1] = CreateInstance <Derived>(); BaseArray <Derived> e = new BaseArray <Derived>(2); e.CopyArray <Derived>(d.Array); }
static void Main(string[] args) { StructArray <int> a = new StructArray <int>(3); a.Array[0] = 1; a.Array[1] = 3; a.Array[2] = 4; for (int i = 0; i < a.Array.Length; i++) { Console.WriteLine(a.Array[i]); } RefArray <StructArray <double> > b = new RefArray <StructArray <double> >(3); b.Array[0] = new StructArray <double>(5); b.Array[0].Array[0] = 1; b.Array[0].Array[1] = 1; b.Array[0].Array[2] = 1; b.Array[0].Array[3] = 1; b.Array[0].Array[4] = 1; b.Array[1] = new StructArray <double>(10); b.Array[2] = new StructArray <double>(105); for (int i = 0; i < b.Array.Length; i++) { Console.WriteLine(b.Array[0].Array[i]); } BaseArray <Base> c = new BaseArray <Base>(3); c.Array[0] = new Base(); c.Array[1] = new Derived(); c.Array[2] = CreateInstance <Base>(); BaseArray <Derived> d = new BaseArray <Derived>(3); d.Array[0] = new Derived(); d.Array[1] = CreateInstance <Derived>(); d.Array[2] = CreateInstance <Derived>(); BaseArray <Derived> e = new BaseArray <Derived>(3); e.CopyArray <Derived>(d.Array); }
public static void Usage() { // test ints (struct type) RefArray <int> c = new RefArray <int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); RefArray <int> d = new RefArray <int>(c); Debug.Print(string.Format("c[3]: {0,-30}, d[3]: {1}", c[3], d[3])); c[3] = 1111; Debug.Print(string.Format("c[3]: {0,-30}, d[3]: {1}", c[3], d[3])); d[3] = 2222; Debug.Print(string.Format("c[3]: {0,-30}, d[3]: {1}", c[3], d[3])); d[3] = c[3] + 3333; Debug.Print(string.Format("c[3]: {0,-30}, d[3]: {1}", c[3], d[3])); // test strings (class type) RefArray <string> a = new RefArray <string>(new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }); RefArray <string> b = new RefArray <string>(a); Debug.Print(string.Format("a[3]: {0,-30}, b[3]: {1}", a[3], b[3])); a[3] = "set a"; Debug.Print(string.Format("a[3]: {0,-30}, b[3]: {1}", a[3], b[3])); b[3] = "set b"; Debug.Print(string.Format("a[3]: {0,-30}, b[3]: {1}", a[3], b[3])); a[3] = b[3] + " + take b set a"; Debug.Print(string.Format("a[3]: {0,-30}, b[3]: {1}", a[3], b[3])); // proof of no point since string[] n1 = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; string[] n2 = n1; Debug.Print(string.Format("n1[3]: {0,-30}, n2[3]: {1}", n1[3], n2[3])); n1[3] = "set n1"; Debug.Print(string.Format("n1[3]: {0,-30}, n2[3]: {1}", n1[3], n2[3])); n2[3] = "set n2"; Debug.Print(string.Format("n1[3]: {0,-30}, n2[3]: {1}", n1[3], n2[3])); n1[3] = n2[3] + " + take n2 set n1"; Debug.Print(string.Format("n1[3]: {0,-30}, n2[3]: {1}", n1[3], n2[3])); }
/// <summary>Creates reference RefArray pointing to same RefArray<T> data.</summary> public RefArray(RefArray <TElem> references) { data = references.data; }