ฉันเพิ่งพบรหัสนี้:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
อะไรstatic implicit operator
หมายถึง?
ฉันเพิ่งพบรหัสนี้:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
อะไรstatic implicit operator
หมายถึง?
คำตอบ:
นี้เป็นผู้ประกอบการแปลง หมายความว่าคุณสามารถเขียนรหัสนี้:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
และคอมไพเลอร์จะไม่บ่น! ที่รันไทม์ตัวดำเนินการแปลงจะถูกดำเนินการ - ส่งผ่านmyBase
เป็นอาร์กิวเมนต์และส่งคืนXElement
ผลลัพธ์ที่ถูกต้อง
นี่เป็นวิธีสำหรับคุณในฐานะนักพัฒนาซอฟต์แวร์ที่จะบอกคอมไพเลอร์:
“ ถึงแม้ว่าสิ่งเหล่านี้จะมีลักษณะที่ไม่เกี่ยวข้องกันสองแบบ แต่จริงๆแล้วมีวิธีการแปลงจากประเภทหนึ่งเป็นอีกประเภทหนึ่ง; ขอให้ฉันจัดการกับตรรกะเพื่อหาวิธีทำ”
โอเปอเรเตอร์ดังกล่าวหมายความว่าคุณสามารถแปลงXmlBase
เป็นXElement
โดยปริยาย
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
ในคำถามที่บอกstatic
ว่ามันจะต้องมีอะไรคงที่? มันไม่สามารถคงที่ได้หรือไม่ดังนั้นจึงสามารถสร้างอินสแตนซ์ได้?
การใช้งานที่น่าสนใจอีกอย่างคือ (ซึ่ง Unity ทำการตรวจสอบว่าวัตถุ (และดังนั้นอินสแตนซ์ของ MonoBehavior) เป็นโมฆะ):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
โปรดทราบว่ารหัสจะต้องอยู่ในชั้นเรียน (CustomClass ในกรณีนี้) ด้วยวิธีนี้คุณสามารถทำสิ่งนี้:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
เห็นได้ชัดว่าการใช้ที่มีชื่อเสียงที่สุดอาจใช้เพื่อแปลงชั้นเรียนของคุณเป็นชั้นเรียนอื่น แต่การใช้พวกมันกับประเภทพื้นฐานก็คุ้มค่าที่จะต้องพิจารณา ...
static implicit operator bool
วิธีการที่จะต้องประกาศภายใน CustomClass
ฉันได้สร้างDotNetFiddle เพื่อใช้ในการสาธิต
มันเป็นตัวดำเนินการแปลงโดยปริยาย (ตรงข้ามกับตัวดำเนินการอย่างชัดเจนซึ่งต้องการ(type)
ไวยากรณ์การแปลง)