<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 + "\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#任务导引教程>练习八的更多相关文章
- Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明
一.基础说明 这里说的“通用接口(CommonAPIs)”是使用微信公众账号一系列高级功能的必备验证功能(应用于开发模式). 我们通过微信后台唯一的凭证,向通用接口发出请求,得到访问令牌(Access ...
- Docker入门教程(八)Docker Remote API
Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...
- 微信公众平台开发教程(八)Session处理
微信公众平台开发教程(八)Session处理 在微信窗口,输入的信息有限,我们需要将一些信息分多次请求. 比如:在进行用户绑定时,我们需要输入用户的相关信息,比如:用户名.密码,或者姓名.电话号码,服 ...
- HMM 自学教程(八)总结
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在HMM 学习最佳范例,这是针对国外网站上一个 HMM 教程的翻译,作者功底很深,翻译得很精彩,且在 ...
- IOS编程教程(八):在你的应用程序添加启动画面
IOS编程教程(八):在你的应用程序添加启动画面 虽然你可能认为你需要编写闪屏的代码,苹果已经可以非常轻松地把它做在Xcode中.不需要任何编码.你只需要做的是设置一些配置. 什么是闪屏 对于那些 ...
- Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
UI系列教程第八课:Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现 今天蓝老师要讲的是关于新浪新闻侧滑界面的实现.先看看原图: 如图所示,这种侧滑效果以另一种方式替 ...
- Java NIO系列教程(八)JDK AIO编程
目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...
- iOS 11开发教程(八)定制iOS11应用程序图标
iOS 11开发教程(八)定制iOS11应用程序图标 在图1.9中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以下就来实现在iOS模拟器上将 ...
- ComicEnhancerPro 系列教程十八:JPG文件长度与质量
作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度 ...
随机推荐
- Java-多态(上)
什么是多态 同一方法可以根据发送对象的不同而采取多种不同的行为方式 一个对象实际类型是确定的 但指向其引用类型却有很多 注意事项 多态是方法的多态 属性没有多态 父类和子类 有联系 类型转换异常 Cl ...
- 深入理解Java虚拟机之JVM内存布局篇
内存布局**** JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...
- 寻找最佳路径(ArcPy实现)
一.背景 随着社会经济发展需求,公路的重要性日益提高.在一些交通欠发达的地区,公路建设迫在眉睫.如何根据实际地形情况设计出比较合理的公路规划,是一个值得研究的问题. 二.实验目的: (1)通过练习,熟 ...
- 洛谷3571 POI2014 SUP-Supercomputer (斜率优化)
一道神仙好题. 首先看到有多组\(k\),第一反应就是离线. 考虑贪心. 我们每次一定是尽量选择有儿子的节点.以便于我们下一次扩展. 但是对于一个\(k\),每次贪心的复杂度是\(O(n)\) 总复杂 ...
- 【转】C语言 printf格式控制符 完全解析
printf的格式控制的完整格式:% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少.②-:有-表示左 ...
- Java版人脸检测详解下篇:编码
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- win10安装git fatal: open /dev/null or dup failed: No such file or directory错误解决方法
原因看大家意思应该是 非即插即用驱动文件null.sys问题. 网上有很多方案.最后试了一个可行的. 替换 windows/system32/drivers/null.sys为网盘中的文件即可. 链 ...
- [对对子队]会议记录4.17(Scrum Meeting8)
今天已完成的工作 何瑞 工作内容:修复了一些bug,优化了UI 相关issue:搭建关卡1 相关签入:4.17签入1 吴昭邦 工作内容:做了一些流水线系统的错误处理,添加了合成失败了之 ...
- 搬运3:welpwnctf题目
记录一道自己做的ctf题目:welpwn --RCTF-2015 1.老生常谈checksec查看: 可以看到只开了nx保护,下面我们进入ida下面看看. 发现是一个想rbp-400,rsp+0h的地 ...
- 查找最小生成树:克鲁斯克尔算法(Kruskal)算法
一.算法介绍 Kruskal算法是一种用来查找最小生成树的算法,由Joseph Kruskal在1956年发表.用来解决同样问题的还有Prim算法和Boruvka算法等.三种算法都是贪心算法的应用.和 ...