您的位置:首页 > 编程语言 > C#

c#学习笔记--静态方法和实例方法、方法的重载、操作符的重载

2016-07-13 09:32 357 查看

1.静态方法和实例方法

用修饰符static 声明的方法为静态方法,不用修饰符static 声明的方法为实例方法。不管类生成或未生成对象,类的静态方法都可以被使用,使用格式为:类名.静态方法名。静态方法只能使用该静态方法所在类的静态数据成员和静态方法。这是因为使用静态方法时,该静态方法所在类可能还没有对象,即使有对象,由于用类名.静态方法名方式调用静态方法,静态方法没有this
指针来存放对象的地址,无法判定应访问哪个对象的数据成员。在类创建对象后,实例方法才能被使用,使用格式为:对象名.实例方法名。实例方法可以使用该方法所在类的所有静态成员和实例成员。例子如下:

using System;

public class UseMethod

{ private static int x=0;//静态字段

private int y=1;//实例字段

public static void StaticMethod()//静态方法

{ x=10;//正确,静态方法访问静态数据成员

//y=20;//错误,静态方法不能访问实例数据成员

}

public void NoStaticMethod()//实例方法

{ x=10;//正确,实例方法访问静态数据成员

y=20;//正确,实例方法访问实例数据成员

}

}

public class Class1

{ public static void Main()

{ UseMethod m=new UseMethod();

UseMethod.StaticMethod();//使用静态方法格式为:类名.静态方法名

m.NoStaticMethod();//使用实例方法格式为:对象名.实例方法名

}

}

2.方法的重载

在C#语言中,如果在同一个类中定义的函数名相同,而参数类型或参数个数不同,认为是不相同的函数,仅返回值不同,不能看作不同函数,这叫做函数的重载。前边Person类中定义了多个构造函数就是重载的例子。在C 语言中,若计算一个数据的绝对值,则需要对不同数据类型求绝对值方法使用不同的方法名,如用abc()求整型数绝对值,labs()求长整型数绝对值,fabs()求浮点数绝对值。而在C#语言中,可以使用函数重载特性,对这三个函数定义同样的函数名,但使用不同的参数类型。下面是实现方法:

using System;

public class UseAbs

{ public int abs(int x)//整型数求绝对值

{ return(x<0 ? -x:x);}

public long abs(long x)//长整型数求绝对值

{return(x<0 ? -x:x);}

public double abs(double x)//浮点数求绝对值

{return(x<0 ? -x:x);}

}

class Class1

{ static void Main(string[] args)

{ UseAbs m=new UseAbs();

int x=-10;

long y=-123;

double z=-23.98d;

x=m.abs(x);

y=m.abs(y);

z=m.abs(z);

Console.WriteLine("x={0},y={1},z={2}",x,y,z);

}

}

类的对象调用这些同名方法,在编译时,根据调用方法的实参类型决定调用那个同名方法,计算不同类型数据的绝对值。这给编程提供了极大方便。

3.操作符重载

操作符重载是将C#语言中的已有操作符赋予新的功能,但与该操作符的本来含义不冲突,使用时只需根据操作符出现的位置来判别其具体执行哪一种运算。操作符重载,实际是定义了一个操作符函数,操作符函数声明的格式如下:static public 函数返回类型operator 重新定义的操作符(形参表) C#语言中有一些操作符是可以重载的,例如:+ - ! ~ ++ -- true false * / % &
| ^<< >> == != > < >= <=等等。但也有一些操作符是不允许进行重载的,例如:=, &&, ||, ?:,new, typeof, sizeof, is等。下边的例子,定义一个复数类,并且希望复数的加减乘除用符号+,-.*,/来表示。

using System;

class Complex//复数类定义

{ private double Real;//复数实部

private double Imag;//复数虚部

public Complex(double x,double y)//构造函数

{ Real=x;

Imag=y;

}

static public Complex operator - (Complex a)//重载一元操作符负号,注意1个参数

{ return (new Complex(-a.Real,-a.Imag));}

static public Complex operator +(Complex a,Complex b)//重载二元操作符加号

{ return (new Complex(a.Real+b.Real,a.Imag+b.Imag));}

public void Display()

{ Console.WriteLine("{0}+({1})j",Real,Imag);}

}

class Class1

{ static void Main(string[] args)

{ Complex x=new Complex(1.0,2.0);

Complex y=new Complex(3.0,4.0);

Complex z=new Complex(5.0,7.0);

x.Display();//显示:1+(2)j

y.Display();//显示:3+(4)j

z.Display();//显示:5+(7)j

z=-x;//等价于z=opeator-(x)

z.Display();//显示:-1+(-2)j

z=x+y;//即z=opeator+(x,y)

z.Display();//显示:4+(6)j

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c#