Operatory C#C# Operators

C# zawiera wiele operatorów, które są symbolami określającymi operacje (matematycznych, indeksowanie, wywołanie funkcji itp.) do wykonania w wyrażeniu.C# provides many operators, which are symbols that specify which operations (math, indexing, function call, etc.) to perform in an expression. Możesz przeciążenia wiele operatorów, aby zmienić ich znaczenia w przypadku zastosowania do typu zdefiniowanego przez użytkownika.You can overload many operators to change their meaning when applied to a user-defined type.

Operacje na typach całkowitoliczbowych (takie jak ==, !=, <, >, &, |) są ogólnie dozwolone w wyliczeniu (enum) typy.Operations on integral types (such as ==, !=, <, >, &, |) are generally allowed on enumeration (enum) types.

Poniższe rozdziały zawierają listę operatorów języka C# od o najwyższym priorytecie do najniższego.The sections below list the C# operators starting with the highest precedence to the lowest. Operatory w każdej sekcji udostępniać na tym samym poziomie pierwszeństwa.The operators within each section share the same precedence level.

Operatory podstawowePrimary Operators

Są to najwyższy pierwszeństwo operatorów.These are the highest precedence operators.

x.y — dostęp do elementu członkowskiego.x.y – member access.

x? y — wartość null, dostęp warunkowy elementu członkowskiego.x?.y – null conditional member access. Zwraca null Jeśli po lewej stronie operand ma wartość null.Returns null if the left-hand operand evaluates to null.

x? [t] — wartość null, dostęp warunkowy indeksu.x?[y] - null conditional index access. Zwraca null Jeśli po lewej stronie operand ma wartość null.Returns null if the left-hand operand evaluates to null.

f(x) — wywołania funkcji.f(x) – function invocation.

[x] — indeksowanie obiektu agregacji.a[x] – aggregate object indexing.

x ++ — zwiększenie przyrostkowe.x++ – postfix increment. Zwraca wartość x, a następnie aktualizuje lokalizację przechowywania z wartością x, która jest większa o jeden (zazwyczaj dodaje liczbę całkowitą 1).Returns the value of x and then updates the storage location with the value of x that is one greater (typically adds the integer 1).

x — — zmniejszenie przyrostkowe.x-- – postfix decrement. Zwraca wartość x, a następnie aktualizuje lokalizację przechowywania z wartością x, która jest mniejsza (zazwyczaj odejmuje liczbę całkowitą 1).Returns the value of x and then updates the storage location with the value of x that is one less (typically subtracts the integer 1).

nowe — podczas tworzenia wystąpienia typu.new – type instantiation.

TypeOf — zwraca Type obiekt reprezentujący argument.typeof – returns the Type object representing the operand.

zaznaczone — umożliwia przepełnienie sprawdzania pod kątem operacji liczby całkowitej.checked – enables overflow checking for integer operations.

unchecked — wyłącza przepełnienie sprawdzania pod kątem operacji liczby całkowitej.unchecked – disables overflow checking for integer operations. Jest to domyślne zachowanie kompilatora.This is the default compiler behavior.

wartość Default(T) — tworzy domyślną wartość typu T.default(T) – produces the default value of type T.

Delegowanie — deklaruje i zwraca wystąpienie delegata.delegate – declares and returns a delegate instance.

Operator sizeof — zwraca rozmiar w bajtach argument typu.sizeof – returns the size in bytes of the type operand.

-> — wyłuskanie wskaźnika w połączeniu z dostępu do elementu członkowskiego.-> – pointer dereferencing combined with member access.

Operatory jednoargumentoweUnary Operators

Te operatory mają wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.These operators have higher precedence than the next section and lower precedence than the previous section.

+ x — zwraca wartość x.+x – returns the value of x.

-x — negacji liczbowych.-x – numeric negation.

!x — negacji logicznej.!x – logical negation.

~ x — uzupełnienie bitowe.~x – bitwise complement.

++ x — przedrostkowe.++x – prefix increment. Zwraca wartość x po zaktualizowaniu lokalizacji magazynu z wartością x, który jest jednym większą (zazwyczaj dodaje liczbę całkowitą 1).Returns the value of x after updating the storage location with the value of x that is one greater (typically adds the integer 1).

--x — przedrostkowe.--x – prefix decrement. Zwraca wartość x po zaktualizowaniu lokalizacji magazynu o wartości x, która jest mniejsza (zazwyczaj odejmuje liczbę całkowitą 1).Returns the value of x after updating the storage location with the value of x that is one less (typically subtracts the integer 1).

(T) x — typ rzutowania.(T)x – type casting.

await — czeka Task.await – awaits a Task.

& x — adres.&x – address of.

* x — dereferencji.*x – dereferencing.

Operatory mnożneMultiplicative Operators

Te operatory mają wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.These operators have higher precedence than the next section and lower precedence than the previous section.

x * y — mnożenia.x * y – multiplication.

x / y — dzielenia.x / y – division. Jeśli argumenty są liczbami całkowitymi, wynik jest liczbą całkowitą obcięte w kierunku zera (na przykład -7 / 2 is -3).If the operands are integers, the result is an integer truncated toward zero (for example, -7 / 2 is -3).

x, % y — resztę.x % y – remainder. Jeśli argumenty są liczbami całkowitymi, to zwraca resztę z dzielenia podziału x, y.If the operands are integers, this returns the remainder of dividing x by y. Jeśli q = x / y i r = x % y, następnie x = q * y + r.If q = x / y and r = x % y, then x = q * y + r.

Operatory addytywneAdditive Operators

Te operatory mają wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.These operators have higher precedence than the next section and lower precedence than the previous section.

x + y — Dodawanie.x + y – addition.

x – y — odejmowania.x – y – subtraction.

Operatory przesunięciaShift Operators

Te operatory mają wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.These operators have higher precedence than the next section and lower precedence than the previous section.

x << y — przesunięcia bitów w lewo i wypełnić zero po prawej stronie.x << y – shift bits left and fill with zero on the right.

x >> y — shift bits po prawej stronie.x >> y – shift bits right. Jeśli Lewy argument operacji jest int lub long, a następnie po lewej stronie bity są wypełnione bitu znaku.If the left operand is int or long, then left bits are filled with the sign bit. Jeśli Lewy argument operacji jest uint lub ulong, a następnie po lewej stronie bity są wypełnione zero.If the left operand is uint or ulong, then left bits are filled with zero.

Operatory relacyjne i badania typuRelational and Type-testing Operators

Te operatory mają wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.These operators have higher precedence than the next section and lower precedence than the previous section.

x < y — mniejsze niż (wartość true, jeśli x jest mniejsza niż y).x < y – less than (true if x is less than y).

x > y — większa (wartość true, jeśli x jest większa niż y).x > y – greater than (true if x is greater than y).

x <= y — mniejsze niż lub równe.x <= y – less than or equal to.

x > = y — większa lub równa.x >= y – greater than or equal to.

jest — wpisz zgodności.is – type compatibility. Zwraca wartość PRAWDA, jeśli ocenianą lewy operand mogą być rzutowane na typ określony w prawy operand (typu statycznego).Returns true if the evaluated left operand can be cast to the type specified in the right operand (a static type).

jako — konwersja typu.as – type conversion. Zwraca lewy operand rzutowany na typ określony przez prawy operand (typ statycznej), ale as zwraca null gdzie (T)x spowoduje zgłoszenie wyjątku.Returns the left operand cast to the type specified by the right operand (a static type), but as returns null where (T)x would throw an exception.

Operatory równościEquality Operators

Te operatory mają wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.These operators have higher precedence than the next section and lower precedence than the previous section.

x == y — równości.x == y – equality. Domyślnie dla odwołania do typów innych niż stringten zwraca odwołania równości (test tożsamości).By default, for reference types other than string, this returns reference equality (identity test). Jednak typów może doprowadzić do przeciążenia ==, więc jeśli zgodne z zamiarami użytkownika jest, aby sprawdzić tożsamość, najlepiej użyć ReferenceEquals metody object.However, types can overload ==, so if your intent is to test identity, it is best to use the ReferenceEquals method on object.

x! = y — są nierówne.x != y – not equal. Zobacz komentarz dotyczący ==.See comment for ==. Jeśli typem przeciążenia ==, a następnie przeciąża musi !=.If a type overloads ==, then it must overload !=.

Operator logiczny ANDLogical AND Operator

Ten operator ma wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.This operator has higher precedence than the next section and lower precedence than the previous section.

x i y — operatora logicznego lub bitowego AND.x & y – logical or bitwise AND. Zazwyczaj można użyć tego z typami całkowitymi i enum typów.You can generally use this with integer types and enum types.

Logiczne XOR — OperatorLogical XOR Operator

Ten operator ma wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.This operator has higher precedence than the next section and lower precedence than the previous section.

x ^ y — logicznych lub bitowe XOR.x ^ y – logical or bitwise XOR. Zazwyczaj można użyć tego z typami całkowitymi i enum typów.You can generally use this with integer types and enum types.

Logiczne OR — OperatorLogical OR Operator

Ten operator ma wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.This operator has higher precedence than the next section and lower precedence than the previous section.

x | y — logicznych lub bitowe OR.x | y – logical or bitwise OR. Zazwyczaj można użyć tego z typami całkowitymi i enum typów.You can generally use this with integer types and enum types.

Operator warunkowy ANDConditional AND Operator

Ten operator ma wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.This operator has higher precedence than the next section and lower precedence than the previous section.

x & & y — operatora logicznego AND.x && y – logical AND. Jeśli pierwszy operand zwróci wartość false, następnie C# nie może oszacować drugiego operandu.If the first operand evaluates to false, then C# does not evaluate the second operand.

Warunkowego lub operatoraConditional OR Operator

Ten operator ma wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.This operator has higher precedence than the next section and lower precedence than the previous section.

x | | y — operator logiczny lub.x || y – logical OR. Jeśli pierwszy argument zwraca wartość true, następnie C# nie może oszacować drugiego operandu.If the first operand evaluates to true, then C# does not evaluate the second operand.

Operatorem łączenia wartości nullNull-coalescing Operator

Ten operator ma wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.This operator has higher precedence than the next section and lower precedence than the previous section.

x? y — zwraca x jeśli je ma wartość inną niżnull; w przeciwnym razie zwraca y.x ?? y – returns x if it is non-null; otherwise, returns y.

Operator warunkowyConditional Operator

Ten operator ma wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.This operator has higher precedence than the next section and lower precedence than the previous section.

t? x: y — w przypadku testowania t daje w wyniku wartość true, a następnie oceniana i zwracana x; w przeciwnym razie oceniana i zwracana y.t ? x : y – if test t evaluates to true, then evaluate and return x; otherwise, evaluate and return y.

Operatory Lambda i przypisanieAssignment and Lambda Operators

Te operatory mają wyższy priorytet niż następnej sekcji i niższy priorytet niż w poprzedniej sekcji.These operators have higher precedence than the next section and lower precedence than the previous section.

x = y — przypisania.x = y – assignment.

x += y — przyrostu.x += y – increment. Dodaj wartość y wartość x, zapisują wynik w xi zwraca nową wartość.Add the value of y to the value of x, store the result in x, and return the new value. Jeśli x wyznacza event, następnie y musi mieć odpowiednią funkcję, dodającego C# jako program obsługi zdarzeń.If x designates an event, then y must be an appropriate function that C# adds as an event handler.

x-= y — zmniejszanie.x -= y – decrement. Odejmuje wartość y od wartości x, zapisują wynik w xi zwraca nową wartość.Subtract the value of y from the value of x, store the result in x, and return the new value. Jeśli x wyznacza event, następnie y musi mieć odpowiednią funkcję, który C# usuwa jako program obsługi zdarzeńIf x designates an event, then y must be an appropriate function that C# removes as an event handler

x * = y — mnożenie i przypisanie.x *= y – multiplication assignment. Mnoży wartość y wartość x, zapisują wynik w xi zwraca nową wartość.Multiply the value of y to the value of x, store the result in x, and return the new value.

x / = y — dzielenie i przypisanie.x /= y – division assignment. Dzieli wartość x przez wartość y, zapisują wynik w xi zwraca nową wartość.Divide the value of x by the value of y, store the result in x, and return the new value.

x % = y — remainder przypisania.x %= y – remainder assignment. Dzieli wartość x przez wartość y, przechowywać resztę w xi zwraca nową wartość.Divide the value of x by the value of y, store the remainder in x, and return the new value.

x & = y — i przypisanie.x &= y – AND assignment. I wartość y z wartością x, zapisują wynik w xi zwraca nową wartość.AND the value of y with the value of x, store the result in x, and return the new value.

x |= y — i przypisanie.x |= y – OR assignment. LUB wartość y z wartością x, zapisują wynik w xi zwraca nową wartość.OR the value of y with the value of x, store the result in x, and return the new value.

x ^ = y — przypisanie XOR.x ^= y – XOR assignment. XOR wartość z y z wartością x, zapisują wynik w xi zwraca nową wartość.XOR the value of y with the value of x, store the result in x, and return the new value.

x << = y — przypisania przesunięcia w lewo.x <<= y – left-shift assignment. Przesuwa wartość x po lewej stronie, y miejscach, zapisują wynik w xi zwraca nową wartość.Shift the value of x left by y places, store the result in x, and return the new value.

x >> = y — przypisania przesunięcia w prawo.x >>= y – right-shift assignment. Przesuwa wartość x bezpośrednio przez y miejscach, zapisują wynik w xi zwraca nową wartość.Shift the value of x right by y places, store the result in x, and return the new value.

=> — deklaracji lambda.=> – lambda declaration.

Przepełnienie arytmetyczneArithmetic Overflow

Operatory arytmetyczne (+, - , * , / ) może generuje wyniki, które wykraczają poza zakres możliwych wartości dla typu liczbowego.The arithmetic operators (+, -, *, /) can produce results that are outside the range of possible values for the numeric type involved. Należy zapoznać się z sekcją na konkretnym operatorze, aby uzyskać szczegółowe informacje, ale ogólnie rzecz biorąc:You should refer to the section on a particular operator for details, but in general:

  • Arytmetyka przepełnienia liczb całkowitych zgłasza OverflowException lub odrzuca najbardziej znaczące bity wyniku.Integer arithmetic overflow either throws an OverflowException or discards the most significant bits of the result. Dzielenie liczby całkowitej przez zero zawsze generuje wyjątek DivideByZeroException.Integer division by zero always throws a DivideByZeroException.

    Jeśli występuje przepełnienie liczby całkowitej, co się stanie, zależy od kontekstu wykonywania, który może być zaznaczony lub niezaznaczony.When integer overflow occurs, what happens depends on the execution context, which can be checked or unchecked. W kontekście sprawdzanym OverflowException zgłaszany.In a checked context, an OverflowException is thrown. W kontekście niesprawdzanym najbardziej znaczące bity wyniku są odrzucane, a wykonywanie jest kontynuowane.In an unchecked context, the most significant bits of the result are discarded and execution continues. W związku z tym C# umożliwia wybranie obsługi lub zignorowanie przepełnienie.Thus, C# gives you the choice of handling or ignoring overflow. Domyślnie operacje arytmetyczne występują w unchecked kontekstu.By default, arithmetic operations occur in an unchecked context.

    Oprócz operacje arytmetyczne rzutowania typu całkowitego do typu całkowitego mogą spowodować przepełnienie (np. Jeśli zrzutować długie do int) i podlegają wykonaniu sprawdzanemu lub niesprawdzanemu.In addition to the arithmetic operations, integral-type to integral-type casts can cause overflow (such as when you cast a long to an int), and are subject to checked or unchecked execution. Jednakże operatory bitowe i operatory przesunięcia nigdy nie powodują przepełnienia.However, bitwise operators and shift operators never cause overflow.

  • Zmiennoprzecinkowe przepełnienia arytmetycznego lub dzielenie przez zero nigdy nie zgłasza wyjątek, ponieważ typy zmiennoprzecinkowe są oparte na standardzie IEEE 754, dlatego mają mechanizmy reprezentowania nieskończoności i NaN (nieliczbową).Floating-point arithmetic overflow or division by zero never throws an exception, because floating-point types are based on IEEE 754 and so have provisions for representing infinity and NaN (Not a Number).

  • Dziesiętna przepełnienie arytmetyczne zawsze wyrzuca OverflowException.Decimal arithmetic overflow always throws an OverflowException. Dzielenie dziesiętne przez zero zawsze generuje wyjątek DivideByZeroException.Decimal division by zero always throws a DivideByZeroException.

Zobacz teżSee Also