例如://Does NOT honor the rules of Math precedenceInt32 value=10;value*=15 + 12; //value=170//Does honor the rules of Math precedence, and does the multiplication on the second line BEFORE the additionInt32 value=10;value=value * 15 + 12; //value=162我希望第一個能正常工作,編譯器會先完成*,但它沒有。這是意料之中的,因為 * 在賦值運算符的左側。有什么方法可以創建另一個像 ++ 和 – 運算符一樣運行的運算符,有點像這樣......public Int32 =*(Int32 lhs , Int32 rhs){ //Using the above values lhs=lhs*rhs}操作和 =* 將在右側有 *,因此清楚地指示到達賦值運算符之前的 *。我只是不確定如何在評估 rhs 變量之前將其分解。任何想法都會有所幫助。
2 回答

largeQ
TA貢獻2039條經驗 獲得超8個贊
如果您希望更改運算符的優先級,則您的代碼沒有意義*=。
如果我從這個開始(忽略它不是有效的 C# 的事實):
Public Int32 =*(Int32 lhs , Int32 rhs)
{
//Using the above values
Return (10*15) + 12;
}
...然后有這個代碼:
Int32 value = 10;
value =* 15 + 12;
...調用=*將設置lhs為10,但它必須設置rhs為的結果15 + 12。
這將與內置*=運算符的行為相同。

慕蓋茨4494581
TA貢獻1850條經驗 獲得超11個贊
根據 OP 在問題評論部分的進一步評論,可能創建運算符是為了更容易編寫聚合操作 : sum = sum + value
,因此不遵循正常的數學規則,它可能比你提出的更有用.
C# 你不能創建新的運算符?,F有的運算符是內置在語言中的,因此至少要添加任何新的運算符,您還需要在編譯器中實現一些部分來解析它們。
C# 確實允許運算符重載,但它會導致定義您自己的整數,我認為這不是一條幸福的道路。
除了 C# 之外,還有其他語言確實允許這樣做(特別是運算符只是普通方法的函數式語言)。
來自C# 語言規范
某些運算符可以重載。運算符重載允許為其中一個或兩個操作數屬于用戶定義的類或結構類型的操作指定用戶定義的運算符實現(運算符重載)。
- 2 回答
- 0 關注
- 148 瀏覽
添加回答
舉報
0/150
提交
取消