//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;
}
}
原文:http://www.cnblogs.com/zhangyongjian/p/3624461.html