Tôi đã thử nghiệm tác động của việc gọi một thành viên ảo trong một nhà xây dựng, và phát hiện ra rằng khi gọi thành viên đó, ngoại lệ kết quả được bao bọc trong một TargetInvocationException
.Các thành viên ảo có được gọi qua phản xạ (trong hoàn cảnh bình thường) không?
Theo docs này là:
Trường hợp ngoại lệ được ném bằng phương pháp gọi thông qua phản ánh
Tuy nhiên tôi không biết về bất kỳ invokations thông qua phản ánh. Vì vậy, điều này có nghĩa là các thành viên ảo có nghĩa là luôn luôn được gọi là thông qua sự phản ánh? Nếu không phải lý do tại sao trong trường hợp này?
Mã:
class ClassA
{
public ClassA()
{
SplitTheWords();
}
public virtual void SplitTheWords()
{
//I've been overidden
}
}
class ClassB : ClassA
{
private readonly String _output;
public ClassB()
{
_output = "Constructor has occured";
}
public override void SplitTheWords()
{
String[] something = _output.Split(new[]{' '}); //TargetInvocationException!
}
}
+1 cho "hơi gây nhầm lẫn", đó là điều gây nhầm lẫn sâu sắc đối với tài liệu để nói. Người ta có thể viết một ứng dụng giao diện điều khiển mà không có gì ngoại trừ 'ném mới TargetInvocationException();' - nơi sẽ là sự phản ánh sau đó? – AakashM
Tôi hiểu _why_ thành viên ảo không nên được gọi từ các nhà thầu, đây là những gì khiến tôi thử cách này –
@ m.edmondson Xin lỗi, tôi hiểu điều này từ dòng của bạn về 'Tôi đã thử nghiệm tác động của ...', tôi không có ý định trả lời của tôi để được condescending (nhưng tôi nghĩ rằng nó bây giờ có thể được), tôi chỉ đơn thuần bao gồm các đoạn văn cuối cho đầy đủ cho những người khác nhìn thấy câu trả lời này. Tôi sẽ cố gắng nói lại. –