C#学习笔记_4

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
}
}

转载于:https://www.cnblogs.com/chensi123/p/5650273.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值