./dotnet/cs/misc_tests.cs

download original
using System;
using System.Collections.Generic;


namespace oklischat.cstest {

    public class Test {
        void inc(ref int i) {
            i++;
        }

        void partest(int i, params object[] ds) {
            Console.Out.Write("i={0}\n", i);
            Console.Out.Write("{0} ds:\n", ds.Length);
            foreach (object d in ds) {
                Console.Out.Write("{0}\n", d);
            }
        }


//         //error CS0504: The constant `oklischat.cstest.Test.cj' cannot be marked static
//         // ("static" is implicit for constants)
//         static const int ci = 42;
//         static const int cj = ci + 5;

//         //error CS0236: A field initializer cannot reference the nonstatic field, method, or property `oklischat.cstest.Test.ci'
//         int ci = 42;
//         int cj = ci + 5;


        const int ci = 42;
        const int cj = ci + 5;

        //boxing.cs(34,21): error CS8025: Parsing error
//         const int cf(int i) {
//             return i+10;
//         }

//         const int ck = cf(cj);

        //error CS0106: The modifier `readonly' is not valid for this item
//         readonly int rf(int i) {
//             return i+10;
//         }


        public delegate void MyEventType(int arg1, double arg2);

        public event MyEventType myevt;


        public void handler(/*const (unspported)*/ int arg1, double arg2) {
            Console.Out.Write("handler, args={0} {1}\n", arg1, arg2);
        }

        public Test() {
            int i = 42;
            object io = (object)i;
            int j = (int)io;

            i++;
            Console.Out.Write("{0} {1}\n", i,j);
            inc(ref i);
            Console.Out.Write("{0} {1}\n", i,j);
            i*=i; i*=i; /*checked {*/ i*=i; /*}*/
            Console.Out.WriteLine("i enlarged: {0}", i);

            partest(42,3.5,6.7,7.6,"hello");
            partest(42,new object[]{3.5,6.7,7.6},"hello");

            Console.Out.Write("cj={0}\n", cj);

            const int ci=23;
            Console.Out.WriteLine("ci={0}\n", ci);

            Console.Out.Write("explicit delegate call...\n");
            MyEventType methPointer = new MyEventType(handler);
            methPointer(100,33.332);

            Console.Out.Write("call via event...\n");
            myevt += new MyEventType(handler);
            myevt += new MyEventType(handler);
            myevt += new MyEventType(handler);
            OtherClass oc = new OtherClass();
            myevt += new MyEventType(oc.OtherHandler);

            myevt += delegate(int i, double d) {
                Console.Out.Write("anon delegate, args={0} {1}\n", i, d);
            };

            myevt(42, 23.55);

            closureTest();
            enumTest();
        }


        public delegate int Getter();  //QU: how to get rid of this
                                       //declaration and define
                                       //delegate types in-place?

        public Getter getIncrementor() {
            int i=0;
            return delegate {
                return i++;
            };
        }
        
        public void closureTest() {
            Getter incr1 = getIncrementor();
            Getter incr2 = getIncrementor();
            Console.Out.Write("next={0}\n", incr1());
            Console.Out.Write("next={0}\n", incr1());
            Console.Out.Write("next={0}\n", incr2());
            Console.Out.Write("next={0}\n", incr2());
            Console.Out.Write("next={0}\n", incr2());
            Console.Out.Write("next={0}\n", incr2());
            Console.Out.Write("next={0}\n", incr1());
        }


        public IEnumerable<int> SomeNumbers() {
            yield return 42; yield return 23; yield break;
        }

        public void enumTest() {
            foreach (int i in SomeNumbers()) { Console.WriteLine("{0}",i); }
        }


        public static void Main(string[] args) {
            new Test();
        }

    }


    public class OtherClass {
        public void OtherHandler(int arg1, double arg2) {
            Console.Out.Write("OtherHandler, args={0} {1}\n", arg1, arg2);
        }
    }
}

  
back to cs

(C) 1998-2017 Olaf Klischat <olaf.klischat@gmail.com>