0%

【C#】Operator转换


①自定义转换

为自己的结构或者定义显式和隐式转换

对目标对象进行隐式转换

public static implicit operator 转换类型(被转换类型 目标对象){…}

调用:

转换类型 转换类型的对象=目标对象;

这行代码应当出现在对象转换为的类中,而且转换函数是没有函数名称的,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Dog{
......
public static implicit operator Dog(Cat cat)//定义隐式转换
{
......
}
}

class Program{
static void Main(string[] args)
{
Cat cat=new Cart();
Dog dog=cat;//调用隐式转换
......
}
}

对目标类型进行显式转换

public static explicit operator 转换类型(被转换类型 目标类){…}

调用:

转换类型 转换类型的对象=(转换类型的对象)目标对象;

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Dog{
......
public static explicit operator Dog(Cat cat)//定义显式转换
{
......
}}

class Program{
static void Main(string[] args)
{
Cat cat=new Cart();
Dog dog=(Dog)cat;//调用显式转换
......
}

②重载运算符

利用现有的某种运算符,针对自定义类(派生)或者结构,定义某种运算操作

如:父亲*母亲=儿子 语法:

public static Human operator * (Human male,Human female)
{

return new Human();
}

Human 为运算返回值。 重载运算符的定义语法也是在类中使用,实例化该例后即可对其对象和派生出的类的对象使用(是对类还是对对象要看如何定义)。 如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Human{
......
public static Human operator + (Human male,Human female)
{
...
return new Human();
}
}

class Program{
static void Main(string[] args)
{
Human male=new Human();
Human female=new Human();
Human child=(female+male);
......
}

可重载的运算符:

一元运算符:+,-,!,~,++,—,true,false(操作数必须是类或结构)

二元运算符:+,-,*,/,%,&,!,^,<<,>>,==,!=,>,<,>=,<= (两个操作数至少有一个是类或结构)

以下运算符不能重载:=,&&,,[],() 重载运算符不能做以下事: ⚪创造新运算符 ⚪改变运算符语法 ⚪重定义因算符如何预处理类型(int a+int b等于a-b) ⚪改变运算符的优先级和结合性