зеркало из https://github.com/mono/old-code.git
59 строки
2.6 KiB
XML
59 строки
2.6 KiB
XML
<?xml version="1.0"?>
|
|
<clause number="8.7.6" title="Operators" informative="true">
|
|
<paragraph>An operator is a member that defines the meaning of an expression operator that can be applied to instances of the class. There are three kinds of operators that can be defined: unary operators, binary operators, and conversion operators. </paragraph>
|
|
<paragraph>The following example defines a Digit type that represents <keyword>decimal</keyword> digits-integral values between 0 and 9. <code_example><![CDATA[
|
|
using System;
|
|
public struct Digit
|
|
{
|
|
byte value;
|
|
public Digit(byte value) {
|
|
if (value < 0 || value > 9) throw new ArgumentException();
|
|
this.value = value;
|
|
}
|
|
public Digit(int value): this((byte) value) {}
|
|
public static implicit operator byte(Digit d) {
|
|
return d.value;
|
|
}
|
|
public static explicit operator Digit(byte b) {
|
|
return new Digit(b);
|
|
}
|
|
public static Digit operator+(Digit a, Digit b) {
|
|
return new Digit(a.value + b.value);
|
|
}
|
|
public static Digit operator-(Digit a, Digit b) {
|
|
return new Digit(a.value - b.value);
|
|
}
|
|
public static bool operator==(Digit a, Digit b) {
|
|
return a.value == b.value;
|
|
}
|
|
public static bool operator!=(Digit a, Digit b) {
|
|
return a.value != b.value;
|
|
}
|
|
public override bool Equals(object value) {
|
|
if (value == null) return false;
|
|
if (GetType() == value.GetType()) return this == (Digit)value;
|
|
return false; }
|
|
public override int GetHashCode() {
|
|
return value.GetHashCode();
|
|
}
|
|
public override string ToString() {
|
|
return value.ToString();
|
|
}
|
|
}
|
|
class Test
|
|
{
|
|
static void Main() {
|
|
Digit a = (Digit) 5;
|
|
Digit b = (Digit) 3;
|
|
Digit plus = a + b;
|
|
Digit minus = a - b;
|
|
bool equals = (a == b);
|
|
Console.WriteLine("{0} + {1} = {2}", a, b, plus);
|
|
Console.WriteLine("{0} - {1} = {2}", a, b, minus);
|
|
Console.WriteLine("{0} == {1} = {2}", a, b, equals);
|
|
}
|
|
}
|
|
]]></code_example></paragraph>
|
|
<paragraph>The Digit type defines the following operators: <list><list_item> An implicit conversion operator from Digit to <keyword>byte</keyword>. </list_item><list_item> An explicit conversion operator from <keyword>byte</keyword> to Digit. </list_item><list_item> An addition operator that adds two Digit values and returns a Digit value. </list_item><list_item> A subtraction operator that subtracts one Digit value from another, and returns a Digit value. </list_item><list_item> The equality (==) and inequality (!=) operators, which compare two Digit values. </list_item></list></paragraph>
|
|
</clause>
|