Example #1
0
        public void _01()
        {
            MyDel printDelegate = C01.PrintDelegate(49);

            Assert.Equal("LOW", printDelegate());

            printDelegate = C01.PrintDelegate(51);
            Assert.Equal("HIGH", printDelegate());
        }
Example #2
0
 public void _01()
 {
     //----------------------------------------------------------------------------------------------------
     // 对于 parameter array,调用时不需要使用 params 标记,
     // 可以传任意多个参数,方法会使用这些参数构造一个 array,然后传给方法,
     //----------------------------------------------------------------------------------------------------
     Assert.Equal(1, C01.Fn01(1));
     Assert.Equal(3, C01.Fn01(1, 2));
     Assert.Equal(6, C01.Fn01(1, 2, 3));
 }
Example #3
0
        public void _01()
        {
            var ca = new CA {
                Name = "luotao", Age = 18
            };
            var cb = new CB {
                First = "luo", Last = "tao", PersonsAge = 18
            };

            Assert.Equal(C01.PrintInfo(ca), C01.PrintInfo(cb));
        }
Example #4
0
    public void _01()
    {
        (string Name, int Number)fruit = C01.GetFruit();
        Assert.Equal("Apples", fruit.Name);
        Assert.Equal(5, fruit.Number);

        //----------------------------------------------------------------------------------------------------
        // 此时默认的字段名 Item1/Item2... 依然是可用的.
        //----------------------------------------------------------------------------------------------------
        Assert.Equal("Apples", fruit.Item1);
        Assert.Equal(5, fruit.Item2);
    }
Example #5
0
    public void _01()
    {
        //----------------------------------------------------------------------------------------------------
        // 没有解构, 通过 Item1/Item2... 访问字段.
        //----------------------------------------------------------------------------------------------------
        var person01 = C01.GetPerson();

        Assert.Equal("luotao", person01.Item1);
        Assert.Equal(18, person01.Item2);

        //----------------------------------------------------------------------------------------------------
        // 没有解构, 显式指定 tuple 的类型.
        //----------------------------------------------------------------------------------------------------
        (string, int)person02 = C01.GetPerson();
        Assert.Equal("luotao", person02.Item1);
        Assert.Equal(18, person02.Item2);

        //----------------------------------------------------------------------------------------------------
        // 没有解构, 显式指定 tuple 的类型, 并且指定 tuple 的字段名.
        //----------------------------------------------------------------------------------------------------
        (string name03, int age03)person03 = C01.GetPerson();
        Assert.Equal("luotao", person03.name03);
        Assert.Equal(18, person03.age03);

        //----------------------------------------------------------------------------------------------------
        // 解构, 将 tuple 的字段解构到单独的变量中.
        //----------------------------------------------------------------------------------------------------
        (string name04, int age04) = C01.GetPerson();
        Assert.Equal("luotao", name04);
        Assert.Equal(18, age04);

        //----------------------------------------------------------------------------------------------------
        // 解构, 将 tuple 的字段解构到单独的变量中.
        //----------------------------------------------------------------------------------------------------
        var(name05, age05) = C01.GetPerson();
        Assert.Equal("luotao", name05);
        Assert.Equal(18, age05);

        //----------------------------------------------------------------------------------------------------
        // 解构, 将 tuple 的字段解构到已经存在的变量中.
        //----------------------------------------------------------------------------------------------------
        string name06;
        int    age06;

        (name06, age06) = C01.GetPerson();
        Assert.Equal("luotao", name06);
        Assert.Equal(18, age06);
    }
Example #6
0
        public void _02()
        {
            //----------------------------------------------------------------------------------------------------
            // 也可以直接传递一个 array 作为参数,
            //----------------------------------------------------------------------------------------------------
            int[] arr01 = { };
            arr01.GetEnumerator();

            Assert.Equal(1, C01.Fn01(1, arr01));

            int[] arr02 = { 2 };
            Assert.Equal(3, C01.Fn01(1, arr02));

            int[] arr03 = { 2, 3 };
            Assert.Equal(6, C01.Fn01(1, arr03));
        }
Example #7
0
    public void _01()
    {
        var x = 6;
        var y = 6;
        var z = 6;

        Assert.Equal(6, x);
        Assert.Equal(6, y);
        Assert.Equal(6, z);

        // 调用方法时, 也需要声明 ref/out 关键字
        C01.F01(x, ref y, out z);

        Assert.Equal(6, x);
        Assert.Equal(9, y);
        Assert.Equal(9, z);
    }
Example #8
0
        public void _01()
        {
            IEnumerator <string> enumerator = C01.BlackAndWhite();

            if (enumerator.MoveNext())
            {
                Assert.Equal("black", enumerator.Current);
            }

            if (enumerator.MoveNext())
            {
                Assert.Equal("gray", enumerator.Current);
            }

            if (enumerator.MoveNext())
            {
                Assert.Equal("white", enumerator.Current);
            }

            Assert.False(enumerator.MoveNext());
        }
Example #9
0
        public void _01()
        {
            var c01 = new C01();

            //----------------------------------------------------------------------------------------------------
            // 使用 object-creation expression 语句创建一个 delegate 对象,
            // 必须传一个 method 作为参数,这个 method 会成为该 delegate 对象的 invocation list 中的第一个 method,
            //----------------------------------------------------------------------------------------------------
            MyDel myDel = c01.Fn01;

            //----------------------------------------------------------------------------------------------------
            // invocation list 中的 method 可以是 instance method 或者 static method,
            // 只要 method 的 signature 和 return type 是匹配的,
            //----------------------------------------------------------------------------------------------------
            myDel = C01.Fn02;

            //----------------------------------------------------------------------------------------------------
            // 可以直接将一个 method 赋值给 delegate,会自动进行隐式类型转换
            //----------------------------------------------------------------------------------------------------
            myDel = c01.Fn01;

            Assert.Equal(4, myDel(2));
        }
Example #10
0
    public void _01()
    {
        var thing01 = ("Apples", 5);

        Assert.Equal("Apples", thing01.Item1);
        Assert.Equal(5, thing01.Item2);

        //----------------------------------------------------------------------------------------------------
        // 如果使用另外一个对象的属性来构造一个 tuple, 则可以从这个对象的属性名来推断出 tuple 类型的字段名.
        //----------------------------------------------------------------------------------------------------
        var c01 = new C01 {
            Name = "Apples", Count = 5
        };
        var thing02 = (c01.Name, c01.Count);

        Assert.Equal("Apples", thing02.Name);
        Assert.Equal(5, thing02.Count);

        //----------------------------------------------------------------------------------------------------
        // 此时默认的字段名 Item1/Item2... 依然是可用的.
        //----------------------------------------------------------------------------------------------------
        Assert.Equal("Apples", thing02.Item1);
        Assert.Equal(5, thing02.Item2);
    }
Example #11
0
 public void _01()
 {
     Assert.Equal(10, C01.F01(3, 4));
 }
Example #12
0
 public void _01()
 {
     C01.Fn01();
 }
Example #13
0
 public void _01()
 {
     Assert.Throws <InvalidCastException>(C01.F01);
     Assert.Equal(2, C01.F02());
     Assert.Equal(2, C01.F03());
 }
Example #14
0
 public void _01()
 {
     Assert.Equal(1, C01.F01(1, 1));
     Assert.Equal(2.2, C01.F01(1.1, 2.2));
 }
Example #15
0
 public void Fn01()
 {
     Assert.Equal(6, C01.Fn01());
 }