Câu trả lời:
Đây là một toán tử chuyển đổi . Nó có nghĩa là bạn có thể viết mã này:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
Và trình biên dịch sẽ không phàn nàn! Khi chạy, toán tử chuyển đổi sẽ được thực thi - chuyển myBase
vào làm đối số và trả về XElement
kết quả hợp lệ .
Đó là một cách để bạn là nhà phát triển nói với trình biên dịch:
"mặc dù chúng trông giống như hai loại hoàn toàn không liên quan, nhưng thực sự có một cách để chuyển đổi từ loại này sang loại khác; hãy để tôi xử lý logic để làm điều đó."
Một toán tử ẩn như vậy có nghĩa là bạn có thể chuyển đổi XmlBase
thành XElement
ngầm định.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
Trong câu hỏi nó nói static
, cái gì phải tĩnh? Nó không thể là tĩnh, vì vậy nó có thể được khởi tạo?
Một cách sử dụng thú vị khác là (mà Unity đã làm để kiểm tra xem một đối tượng (và do đó là một thể hiện của MonoBehavior) là null):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Lưu ý rằng mã phải nằm trong lớp (CustomClass trong trường hợp này). Bằng cách đó bạn có thể làm một cái gì đó như thế này:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
Rõ ràng việc sử dụng khét tiếng nhất có thể là sử dụng nó để chuyển đổi một trong các lớp của bạn sang một lớp khác. Nhưng sử dụng chúng với các loại cơ bản cũng đáng để xem xét ... và tôi thấy nó hiếm khi được đề cập.
static implicit operator bool
phương pháp phải được khai báo bên trong các CustomClass
. Tôi đã tạo một DotNetFiddle cho mục đích demo.
Đó là một toán tử chuyển đổi ẩn (trái ngược với toán tử tường minh, yêu cầu (type)
cú pháp chuyển đổi)