//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 + "\ty的值: " + s.y);
        cPoint cp = new cPoint(12, 12);
        cPoint c = cp;
        cp.x = 112;
        Console.WriteLine("类:");
        Console.WriteLine("x的值:   " + c.x + "\ty的值:" + 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("被零抛出!\n在除法运算中除数不能为零!");
        }
        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("\n编号:{0}\n工资:{1:C2}\n年龄:{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;
    }
}

<C#任务导引教程>练习八的更多相关文章

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明

    一.基础说明 这里说的“通用接口(CommonAPIs)”是使用微信公众账号一系列高级功能的必备验证功能(应用于开发模式). 我们通过微信后台唯一的凭证,向通用接口发出请求,得到访问令牌(Access ...

  2. Docker入门教程(八)Docker Remote API

    Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...

  3. 微信公众平台开发教程(八)Session处理

    微信公众平台开发教程(八)Session处理 在微信窗口,输入的信息有限,我们需要将一些信息分多次请求. 比如:在进行用户绑定时,我们需要输入用户的相关信息,比如:用户名.密码,或者姓名.电话号码,服 ...

  4. HMM 自学教程(八)总结

    本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在HMM 学习最佳范例,这是针对国外网站上一个 HMM 教程的翻译,作者功底很深,翻译得很精彩,且在 ...

  5. IOS编程教程(八):在你的应用程序添加启动画面

    IOS编程教程(八):在你的应用程序添加启动画面   虽然你可能认为你需要编写闪屏的代码,苹果已经可以非常轻松地把它做在Xcode中.不需要任何编码.你只需要做的是设置一些配置. 什么是闪屏 对于那些 ...

  6. Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现

    UI系列教程第八课:Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现 今天蓝老师要讲的是关于新浪新闻侧滑界面的实现.先看看原图: 如图所示,这种侧滑效果以另一种方式替 ...

  7. Java NIO系列教程(八)JDK AIO编程

    目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...

  8. iOS 11开发教程(八)定制iOS11应用程序图标

    iOS 11开发教程(八)定制iOS11应用程序图标 在图1.9中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以下就来实现在iOS模拟器上将 ...

  9. ComicEnhancerPro 系列教程十八:JPG文件长度与质量

    作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度 ...

随机推荐

  1. 面试官一口气问了MySQL事务、锁和MVCC,我

    面试官:你是怎么理解InnoDB引擎中的事务的? 候选者:在我的理解下,事务可以使「一组操作」要么全部成功,要么全部失败 候选者:事务其目的是为了「保证数据最终的一致性」. 候选者:举个例子,我给你发 ...

  2. Apache Common-collection 反序列化利用链解析--TransformedMap链

    Apache Common-collection 反序列化利用链解析 TransformedMap链 参考Java反序列化漏洞分析 - ssooking - 博客园 (cnblogs.com) poc ...

  3. Python读取Excel表格

    前言:需要进行自动化办公或者自动化测试的朋友,可以了解下此文,掌握Python读取Excel表格的方法. 一.准备工作: 1.安装Python3.7.0(官网下载安装包) 2.安装Pycharm(官网 ...

  4. 锚点布局anchorlayout在kv中的引用

    from kivy.app import App from kivy.uix.anchorlayout import AnchorLayout from kivy.uix.button import ...

  5. Alpha Scrum Meeting汇总

    第一次Alpha Scrum Meeting 第二次Alpha Scrum Meeting 第三次Alpha Scrum Meeting 第四次Alpha Scrum Meeting 第五次Alpha ...

  6. mac上安装lua

    一.背景 最近在操作redis的时候,有些时候是需要原子操作的,而redis中支持lua脚本,因此为了以后学习lua,此处记录一下 lua的安装. 二.mac上安装lua 其余的系统上安装lua步骤大 ...

  7. activiti会签 多实例例子

    在实际的业务中,可能存在存在这么一种情况,当流程运行到某一个环节时,可能需要同时多个人的参与,才可以完成此环节.此时就可以用到activiti的多实例来解决此问题. 一.将一个节点设置成多实例的方法: ...

  8. gson中TypeAdapter实现自定义序列化操作

    最近在项目中遇到这么一个问题,我们后台需要向前端返回一个 json 数据,就是将一个地理位置对象以json的格式返回到前台,但是这个地理位置对象中的经纬度是Double数据类型,项目中规定,如果经纬度 ...

  9. Kruskal重构树-进阶

    例题一:区间最小生成树(NKOJ P8439) 简要题意: 一个n个点m条边的无向图,点编号1到n,边编号1到m.边有边权. 有q次操作,操作分两种: 1.k x y z:修改第k条边,使其连接的两点 ...

  10. Azure File Storage(一)为本地机器配置网络磁盘

    一,引言 本地机器硬盘空间不够了怎么办?重要文件不想存储在本地硬盘怎么办?加外接移动硬盘:或者换大容量存储设备,都是解决方案.但是每次都得携带,还得考虑当前设备是否支持外接硬盘. 1,这个时候 Win ...