• <C#任务导引教程>练习八


    //66,静态成员与非静态成员的访问方式
    using System;
    class Text
    {
        public int x;
        public static int y;//静态数据成员
        void F()
        {
            x = 1;//正确,等价于this.x=1
            y = 1;//正确,等价于Text.y=1
        }
        static void G()//静态 函数 成员
        {
           // x = 1;错误,不能访问this.x
            y = 1;//正确,等价于Text.y=1
        }
    }
    class Program
    {
        static void Main()
        {
            Text t = new Text();
            t.x = 1;
            //t.y = 1;错误,不能在类的实例中访问静态成员
            //Text.x = 1;错误,不能按类访问非静态成员
            Text.y = 1;
        }
    }

    //67,静态数据成员的定义和引用
    using System;
    class MyClass
    {
        private int A,B,C;
        private static int sum;
        public MyClass(int a, int b, int c)
        {
            A = a;
            B = b;
            C = c;
            sum += A + B + C;
        }
        public void PrintMumber()
        {
            Console.WriteLine("{0};{1};{2}", A, B, C);
        }
        public int PrintSum(MyClass m)
        {
            return MyClass.sum;
        }
    }
    class MainClass
    {
        static void Main()
        {
            MyClass M = new MyClass(3, 4, 5);
            MyClass N = new MyClass(5, 6, 7);
            M.PrintMumber();
            N.PrintMumber();
            //Console.WriteLine("{0};{1}", M.PrintMumber(M), N.PrintMumber(N));
            Console.WriteLine("{0};{1}", M.PrintSum(M), N.PrintSum(N));
        }
    }
    //68,使用静态方法访问静态数据成员
    using System;
    class M
    {
        private int A;
        private static int B = 10;
        public M(int a)
        {
            A = a;
            B += a;
        }
        public static void fun(M m)
        {
            Console.WriteLine("A={0}", m.A);
            Console.WriteLine("B={0}", B);
        }
    }
    class MainClass
    {
        static void Main()
        {
            M P = new M(6);//对于类M中的一般非静态数据成员A是通过对象m来访问的,而对于静态数据成员B,则采用类直接访问的方式
            M Q = new M(8);//对于静态方法成员的调用方式,在C#中只能用类来直接调用
            M.fun(P);// 6,16
            M.fun(Q);//8 18
        }
    }
    //69,用对象成员处理有关类的问题
    using System;
    class A
    {
        char c;
        public A(char m)
        {
            c = m;
        }
        public void print()
        {
            Console.WriteLine("c={0}", c);
        }
    }
    class B
    {
        int p;
        public B(char m,int n)
        {
            A a = new A(m);
            a.print();
            p = n;
        }
        ~B() { }
        public void print()
        {
            Console.WriteLine("p={0}", p);
        }
    }
    class MainClass
    {
        static void Main()
        {
            B b = new B('M', 20);
            b.print();
        }
    }
    //70,结构和类的使用的对比之一
    using System;
    struct sPoint
    {
        public int x, y;
        public sPoint(int a, int b)
        {
            x = a;
            y = b;
        }
    }
    class cPoint
    {
        public int x, y;
        public cPoint(int a, int b)
        {
            x = a;
            y = b;
        }
    }
    class Program
    {//在结构中将结构对象sp复制给新对象s后,开辟了各自的对象空间,即两个变量分别引用两个对象,每个变量都有自己的数据副本,操作一个
        //变量不影响其他变量,在类中将对象cp复制给新对象c后,共用同一对象空间,即两个变量只引用同一个对象,操作一个变量会影响另一个变量
        public static void Main()
        {
            sPoint sp = new sPoint(12, 12);
            sPoint s = sp;
            sp.x = 112;
            Console.WriteLine("结构:");
            Console.WriteLine("x的值:   " + s.x + " y的值: " + s.y);
            cPoint cp = new cPoint(12, 12);
            cPoint c = cp;
            cp.x = 112;
            Console.WriteLine("类:");
            Console.WriteLine("x的值:   " + c.x + " y的值:" + c.y);
        }
    }
    //71,结构和类的使用对比之二
    using System;
    class ClassPoint
    {
        public int x, y;
        public ClassPoint(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }
    struct StructPoint
    {
        public int x, y;
        public StructPoint(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }
    class Program
    {//程序创建并初始化了一个含有10个点的数组,对于作为类的实现的Point,出现了11个实例对象,其中数组生命需要一个对象,他的10个元素每个都需要创建一个对象,
        //然而用结构体来实现,只需要创建一个对象,如果在类中也像结构中一样,把“cp[i]=new ClassPoint”一句删去,系统会报告“未处理的异常,未将对象引用设置到对象的
        //的实例,"可见,在类中必须为每个元素创建一个对象的实例,而在结构中却不需要,如果数组很大,用类和结构在处理有诸如“点”之类的问题的执行效率上,差别是非常大的
        /*结构和类的差别:1,结构是值类型,他在栈区分配地址。类是引用类型,他在堆区分配地址 2,结构成员默认的访问级别是public,而类成员默认访问级别是private
          3,结构不能作为基类型,类可以作为基类型 4,结构无析构函数,类有析构函数*/
        static void Main()
        {
            ClassPoint[] cp = new ClassPoint[10];
            for(int i=0;i<cp.Length;i++)
            {
                cp[i] = new ClassPoint(i, i);
                Console.WriteLine("({0},{1})", cp[i].x, cp[i].y);
            }
            Console.WriteLine();
            StructPoint[] sp = new StructPoint[10];
            for (int i = 0; i < sp.Length; i++)
            {
                Console.Write("({0},{1})", sp[i].x, sp[i].y);
            }
            Console.WriteLine();
        }
    }
    //72,枚举类型
    using System;
    class Program
    {
        enum Color { black, blue, yellow = 14, white };
        public static void Main()
        {
            int a1 = (int)Color.black;
            int a2 = (int)Color.blue;
            int a3 = (int)Color.yellow;
            int a4 = (int)Color.white;
            Console.WriteLine("Black:{0}", a1);
            Console.WriteLine("blue:{0}", a2);
            Console.WriteLine("yellow:{0}", a3);
            Console.WriteLine("white:{0}", a4);
        }
    }
    //73,运算符重载
    using System;
    class Point
    {
        public int x = 0;
        public int y = 0;
        public Point(int a, int b)
        {
            x = a;
            y = b;
        }
        public void Print1()
        {
            Console.WriteLine("第一个矢量的端点坐标是:({0},{1})", x, y);
        }
        public void Print2()
        {
            Console.WriteLine("第二个矢量的端点坐标是:({0},{1})", x, y);
        }
        public static Point operator +(Point a, Point b)
        {
            return new Point(a.x + b.x, a.y + b.y);
        }
    }
    class Program
    {
        public static void Main()
        {
            Point a = new Point(3, 2);
            Point b = new Point(1, 5);
            Point c = a + b;
            a.Print1();
            b.Print2();
            Console.WriteLine("两矢量的端点坐标是:" + '(' + c.x + ',' + c.y + ')');
        }
    }
    //74,throw:抛出异常,try:捕获异常,catch:处理异常
    using System;
    class Program
    {
        public static void Main()
        {
            try
            {
                Console.WriteLine("1/2={0:F2}", Div(1, 2));
                Console.WriteLine("5/3={0:F2}", Div(5,3));
                Console.WriteLine("5/0={0:F2}", Div(5,0));
                Console.WriteLine("10/3={0:F2}", Div(10,3));
            }
            catch(Exception)
            {
                Console.WriteLine("发现异常!");
                Console.WriteLine("被零抛出! 在除法运算中除数不能为零!");
            }
            Console.WriteLine("主函数结束.");
        }
        public static double Div(double a, double b)
        {
            if (b == 0)
                throw new Exception();
            return a / b;
        }
    }
    //75,异常情况
    using System;
    class Program
    {
        public static void Main()
        {
            Console.Write("请输入编号:");
            string number = Console.ReadLine();
            Console.Write("请输入工资:");
            double earnings = Convert.ToDouble(Console.ReadLine());
            Console.Write("请输入年龄:");
            int age = Convert.ToInt32(Console.ReadLine());
            int f = test(number);
            int g = test(earnings);
            int h = test(age);
            if (f == 1 && g == 1 && h == 1)
                Console.WriteLine(" 编号:{0} 工资:{1:C2} 年龄:{2}", number, earnings, age);
        }
        public static int test(string p)
        {
            int f = 1;
            try
            {
                if (p[0] >= '0' && p[0] <= '9')
                    throw new Exception();
            }
            catch (Exception)
            {
                f = 0;
                Console.WriteLine("编号错误:{0}", p[0]);
            }
            return f;
        }
        public static int test(double d)
        {
            int g = 1;
            try
            {
                if (d < 0 || d > 20000)
                    throw new Exception();
            }
            catch (Exception)
            {
                g = 0;
                Console.WriteLine("工资错误:{0}", d);
            }
            return g;
        }
        public static int test(int a)
        {
            int w = 1;
            try
            {
                if (a < 18 || a > 60)
                    throw new Exception();
            }
            catch (Exception)
            {
                w = 0;
                Console.WriteLine("年龄错误:{0}", a);
            }
            return w;
        }
    }

  • 相关阅读:
    步步为营 .NET 设计模式学习笔记 十三、Bridge (桥接模式)
    步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
    Web服务器及客户端软件推荐
    步步为营 .NET 代码重构学习笔记 二、提炼方法(Extract Method)
    步步为营 .NET 代码重构学习笔记 十
    步步为营 .NET 设计模式学习笔记 十、Builder(建造者模式)
    步步为营 .NET 代码重构学习笔记 八
    新浪微博的文字滚动更新效果
    几段javascript实现一个打字游戏效果
    jquery实现简单的手风琴效果
  • 原文地址:https://www.cnblogs.com/zhangyongjian/p/3624461.html
Copyright © 2020-2023  润新知