TypeLoadException 建構函式
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
初始化 TypeLoadException 類別的新執行個體。
多載
TypeLoadException() |
初始化 TypeLoadException 類別的新執行個體。 |
TypeLoadException(String) |
使用指定的錯誤訊息,初始化 TypeLoadException 類別的新執行個體。 |
TypeLoadException(SerializationInfo, StreamingContext) |
已淘汰.
使用序列化資料,初始化 TypeLoadException 類別的新執行個體。 |
TypeLoadException(String, Exception) |
使用指定的錯誤訊息以及造成此例外狀況的內部例外狀況的參考,初始化 TypeLoadException 類別的新執行個體。 |
TypeLoadException()
初始化 TypeLoadException 類別的新執行個體。
public:
TypeLoadException();
public TypeLoadException ();
Public Sub New ()
備註
這個建構函式會將 Message 新實例的 屬性初始化為描述錯誤的系統提供的訊息,例如「載入類型時發生失敗」。此訊息會將目前的系統文化特性納入考慮。
下表顯示 TypeLoadException 執行個體的初始屬性值。
屬性 | 值 |
---|---|
InnerException | null 參考 (在 Visual Basic 中為 Nothing )。 |
Message | 當地語系化的錯誤訊息字串。 |
適用於
TypeLoadException(String)
使用指定的錯誤訊息,初始化 TypeLoadException 類別的新執行個體。
public:
TypeLoadException(System::String ^ message);
public TypeLoadException (string message);
public TypeLoadException (string? message);
new TypeLoadException : string -> TypeLoadException
Public Sub New (message As String)
參數
- message
- String
描述錯誤的訊息。
範例
下列程式碼範例示範建 TypeLoadException(String) 構函式。 它包含使用自訂訊息產生 TypeLoadException 的方法,並將錯誤訊息顯示至主控台。
using namespace System;
class TypeLoadExceptionDemoClass
{
public:
static bool GenerateException()
{
// Throw a TypeLoadException with a custom message.
throw gcnew TypeLoadException("This is a custom TypeLoadException error message.");
}
};
int main()
{
try {
// Call a method that throws an exception.
TypeLoadExceptionDemoClass::GenerateException();
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("TypeLoadException:\n {0}", e->Message);
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception: \n\tError Message = {0}", e->Message );
}
}
// The example displays the following output:
// TypeLoadException:
// This is a custom TypeLoadException error message.
using System;
public class Example
{
public static void Main()
{
try {
// Call a method that throws an exception.
TypeLoadExceptionDemoClass.GenerateException();
}
catch (TypeLoadException e) {
Console.WriteLine("TypeLoadException:\n {0}", e.Message);
}
}
}
class TypeLoadExceptionDemoClass
{
public static bool GenerateException()
{
// Throw a TypeLoadException with a custom defined message.
throw new TypeLoadException("This is a custom TypeLoadException error message.");
}
}
// The example displays the following output:
// TypeLoadException:
// This is a custom TypeLoadException error message.
Public Class Example
Public Shared Sub Main()
Try
' Call a method that throws an exception.
TypeLoadExceptionDemoClass.GenerateException()
Catch e As TypeLoadException
Console.WriteLine("TypeLoadException:{0} {1}", vbCrLf, e.Message)
End Try
End Sub
End Class
Class TypeLoadExceptionDemoClass
Public Shared Function GenerateException() As Boolean
' Throw a TypeLoadException with a custom message.
Throw New TypeLoadException("This is a custom TypeLoadException error message.")
End Function
End Class
' The example displays the following output:
' TypeLoadException:
' This is a custom TypeLoadException error message.
備註
參數的內容 message
應該可供使用者瞭解。 需要此建構函式的呼叫者,才能確保此字串已針對目前的系統文化特性進行當地語系化。
下表顯示 TypeLoadException 執行個體的初始屬性值。
屬性 | 值 |
---|---|
InnerException | null 參考 (在 Visual Basic 中為 Nothing )。 |
Message | 錯誤訊息字串。 |
適用於
TypeLoadException(SerializationInfo, StreamingContext)
警告
This API supports obsolete formatter-based serialization. It should not be called or extended by application code.
使用序列化資料,初始化 TypeLoadException 類別的新執行個體。
protected:
TypeLoadException(System::Runtime::Serialization::SerializationInfo ^ info, System::Runtime::Serialization::StreamingContext context);
protected TypeLoadException (System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
[System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
protected TypeLoadException (System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
new TypeLoadException : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> TypeLoadException
[<System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new TypeLoadException : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> TypeLoadException
Protected Sub New (info As SerializationInfo, context As StreamingContext)
參數
- info
- SerializationInfo
存放序列物件資料的物件。
- context
- StreamingContext
關於來源或目的端的內容資訊。
- 屬性
例外狀況
info
物件是 null
。
範例
下列範例會產生例外狀況,並將例外狀況資料序列化至檔案,然後重新建構例外狀況。 若要執行此程式碼範例,您必須提供完整的元件名稱。 如需如何取得完整元件名稱的資訊,請參閱 元件名稱。
#using <System.Runtime.Serialization.Formatters.Soap.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Soap;
using namespace System::IO;
// This class overrides the GetObjectData method and initializes
// its data with current time.
[Serializable]
public ref class MyTypeLoadExceptionChild: public TypeLoadException
{
public:
System::DateTime ErrorDateTime;
MyTypeLoadExceptionChild()
{
ErrorDateTime = DateTime::Now;
}
MyTypeLoadExceptionChild( DateTime myDateTime )
{
ErrorDateTime = myDateTime;
}
protected:
MyTypeLoadExceptionChild( SerializationInfo^ sInfo, StreamingContext * sContext )
{
// Reconstitute the deserialized information into the instance.
ErrorDateTime = sInfo->GetDateTime( "ErrorDate" );
}
public:
void GetObjectData( SerializationInfo^ sInfo, StreamingContext * sContext )
{
// Add a value to the Serialization information.
sInfo->AddValue( "ErrorDate", ErrorDateTime );
}
};
int main()
{
// Load the mscorlib assembly and get a reference to it.
// You must supply the fully qualified assembly name for mscorlib.dll here.
Assembly^ myAssembly = Assembly::Load( "Assembly text name, Version, Culture, PublicKeyToken" );
try
{
Console::WriteLine( "Attempting to load a type not present in the assembly 'mscorlib'" );
// This loading of invalid type raises a TypeLoadException
Type^ myType = myAssembly->GetType( "System::NonExistentType", true );
}
catch ( TypeLoadException^ )
{
// Serialize the exception to disk and reconstitute it back again.
try
{
System::DateTime ErrorDatetime = DateTime::Now;
Console::WriteLine( "A TypeLoadException has been raised." );
// Create MyTypeLoadException instance with current time.
MyTypeLoadExceptionChild^ myTypeLoadExceptionChild = gcnew MyTypeLoadExceptionChild( ErrorDatetime );
IFormatter^ myFormatter = gcnew SoapFormatter;
Stream^ myFileStream = gcnew FileStream( "typeload.xml",FileMode::Create,FileAccess::Write,FileShare::None );
Console::WriteLine( "Serializing the TypeLoadException with DateTime as {0}", ErrorDatetime );
// Serialize the MyTypeLoadException instance to a file.
myFormatter->Serialize( myFileStream, myTypeLoadExceptionChild );
myFileStream->Close();
Console::WriteLine( "Deserializing the Exception." );
myFileStream = gcnew FileStream( "typeload.xml",FileMode::Open,FileAccess::Read,FileShare::None );
// Deserialize and reconstitute the instance from file.
myTypeLoadExceptionChild = safe_cast<MyTypeLoadExceptionChild^>(myFormatter->Deserialize( myFileStream ));
myFileStream->Close();
Console::WriteLine( "Deserialized exception has ErrorDateTime = {0}", myTypeLoadExceptionChild->ErrorDateTime );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception : {0}", e->Message );
}
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception : {0}", e->Message );
}
}
using System;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.IO;
class GetObjectDataDemo
{
public static void Main()
{
// Get a reference to the assembly mscorlib.dll, which is always
// loaded. (System.String is defined in mscorlib.)
Assembly mscorlib = typeof(string).Assembly;
try
{
Console.WriteLine ("Attempting to load a type not present in the assembly 'mscorlib'");
// This loading of invalid type raises a TypeLoadException
Type myType = mscorlib.GetType("System.NonExistentType", true);
}
catch (TypeLoadException)
{
// Serialize the exception to disk and reconstitute it.
System.DateTime ErrorDatetime = DateTime.Now;
Console.WriteLine("A TypeLoadException has been raised.");
// Create MyTypeLoadException instance with current time.
MyTypeLoadException myException = new MyTypeLoadException(ErrorDatetime);
IFormatter myFormatter = new SoapFormatter();
Stream myFileStream = new FileStream("typeload.xml", FileMode.Create, FileAccess.Write, FileShare.None);
Console.WriteLine("Serializing the TypeLoadException with DateTime as " + ErrorDatetime);
// Serialize the MyTypeLoadException instance to a file.
myFormatter.Serialize(myFileStream, myException);
myFileStream.Close();
Console.WriteLine("Deserializing the Exception.");
myFileStream = new FileStream("typeload.xml", FileMode.Open, FileAccess.Read, FileShare.None);
// Deserialize and reconstitute the instance from file.
myException = (MyTypeLoadException) myFormatter.Deserialize(myFileStream);
myFileStream.Close();
Console.WriteLine("Deserialized exception has ErrorDateTime = " + myException.ErrorDateTime);
}
}
}
// This class overrides the GetObjectData method and initializes
// its data with current time.
[Serializable]
public class MyTypeLoadException : TypeLoadException
{
private System.DateTime _errorDateTime = DateTime.Now;
public DateTime ErrorDateTime { get { return _errorDateTime; }}
public MyTypeLoadException(DateTime myDateTime)
{
_errorDateTime = myDateTime;
}
protected MyTypeLoadException(SerializationInfo sInfo, StreamingContext sContext)
: base(sInfo, sContext)
{
// Reconstitute the deserialized information into the instance.
_errorDateTime = sInfo.GetDateTime("ErrorDate");
}
public override void GetObjectData(SerializationInfo sInfo, StreamingContext sContext)
{
base.GetObjectData(sInfo, sContext);
// Add a value to the Serialization information.
sInfo.AddValue("ErrorDate", ErrorDateTime);
}
}
Imports System.Reflection
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
Imports System.Security.Permissions
Imports System.IO
Class GetObjectDataDemo
Public Shared Sub Main()
' Get a reference to the assembly mscorlib.dll, which is always
' loaded. (System.String is defined in mscorlib.)
Dim tString As Type = GetType(String)
Dim mscorlib As [Assembly] = tString.Assembly
Try
Console.WriteLine("Attempting to load a type not present in the assembly 'mscorlib'")
' This loading of invalid type raises a TypeLoadException
Dim myType As Type = mscorlib.GetType("System.NonExistentType", True)
Catch
' Serialize the exception to disk and reconstitute it.
Dim ErrorDatetime as System.DateTime = DateTime.Now
Console.WriteLine("A TypeLoadException has been raised.")
' Create MyTypeLoadException instance with current time.
Dim myException As new MyTypeLoadException(ErrorDatetime)
Dim myFormatter as IFormatter = new SoapFormatter()
Dim myFileStream as Stream
myFileStream = New FileStream("typeload.xml", FileMode.Create, FileAccess.Write, FileShare.None)
Console.WriteLine("Serializing the TypeLoadException with DateTime as " _
& ErrorDatetime.ToString())
' Serialize the MyTypeLoadException instance to a file.
myFormatter.Serialize(myFileStream, myException)
myFileStream.Close()
Console.WriteLine("Deserializing the Exception.")
myFileStream = New FileStream("typeload.xml", FileMode.Open, FileAccess.Read, FileShare.None)
' Deserialize and reconstitute the instance from file.
myException = CType(myFormatter.Deserialize(myFileStream), MyTypeLoadException)
myFileStream.Close()
Console.WriteLine("Deserialized exception has ErrorDateTime = " + myException.ErrorDateTime.ToString())
End Try
End Sub
End Class
' This class overrides the GetObjectData method and initializes
' its data with current time.
<Serializable()> _
Public Class MyTypeLoadException
Inherits TypeLoadException
Private _errorDateTime As System.DateTime = DateTime.Now
Public ReadOnly Property ErrorDateTime As DateTime
Get
Return _errorDateTime
End Get
End Property
Public Sub New(myDateTime As DateTime)
_errorDateTime = myDateTime
End Sub
Protected Sub New(sInfo As SerializationInfo, sContext As StreamingContext)
MyBase.New(sInfo, sContext)
' Reconstitute the deserialized information into the instance.
_errorDateTime = sInfo.GetDateTime("ErrorDate")
End Sub
' GetObjectData overrides must always have a demand for SerializationFormatter.
<SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter:=true)> _
Public Overrides Sub GetObjectData(sInfo As SerializationInfo, sContext As StreamingContext)
MyBase.GetObjectData(sInfo, sContext)
' Add a value to the Serialization information.
sInfo.AddValue("ErrorDate", ErrorDateTime)
End Sub
End Class
備註
這個建構函式是在還原序列化期間呼叫,以便重新組成透過資料流傳輸的例外狀況物件。 如需詳細資訊,請參閱 < XML 和 SOAP 序列化。
另請參閱
適用於
TypeLoadException(String, Exception)
使用指定的錯誤訊息以及造成此例外狀況的內部例外狀況的參考,初始化 TypeLoadException 類別的新執行個體。
public:
TypeLoadException(System::String ^ message, Exception ^ inner);
public TypeLoadException (string message, Exception inner);
public TypeLoadException (string? message, Exception? inner);
new TypeLoadException : string * Exception -> TypeLoadException
Public Sub New (message As String, inner As Exception)
參數
- message
- String
解釋例外狀況原因的錯誤訊息。
- inner
- Exception
做為目前例外狀況發生原因的例外狀況。 如果 inner
參數不是 null
,則目前的例外狀況會在處理內部例外的 catch
區塊中引發。
範例
下列程式碼範例示範建 TypeLoadException(String, Exception) 構函式。 它包含方法,其會產生 TypeLoadException 、攔截該例外狀況,並使用自訂訊息擲回新的 TypeLoadException ,包括原始 TypeLoadException 作為內部例外狀況。
using namespace System;
using namespace System::Runtime::InteropServices;
ref class TypeLoadExceptionDemoClass
{
public:
// A call to this method will raise a TypeLoadException.
[DllImport("NonExistentDLL.DLL",EntryPoint="MethodNotExists")]
static void NonExistentMethod();
static void GenerateException()
{
try
{
NonExistentMethod();
}
catch ( TypeLoadException^ e )
{
// Rethrow exception with the exception as inner exception
throw gcnew TypeLoadException( "This exception was raised due to a call to an invalid method.",e );
}
}
};
int main()
{
Console::WriteLine( "Calling a method in a non-existent DLL which triggers a TypeLoadException." );
try
{
TypeLoadExceptionDemoClass::GenerateException();
}
catch ( TypeLoadException^ e )
{
Console::WriteLine( "TypeLoadException: \n\tError Message = {0}", e->Message );
Console::WriteLine( "TypeLoadException: \n\tInnerException Message = {0}", e->InnerException->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception: \n\tError Message = {0}", e->Message );
}
}
using System;
using System.Runtime.InteropServices;
public class TypeLoadException_Constructor3
{
public static void Main()
{
Console.WriteLine("Calling a method in a non-existent DLL which triggers a TypeLoadException.");
try
{
TypeLoadExceptionDemoClass3.GenerateException();
}
catch (TypeLoadException e)
{
Console.WriteLine ("TypeLoadException: \n\tError Message = " + e.Message);
Console.WriteLine ("TypeLoadException: \n\tInnerException Message = " + e.InnerException.Message );
}
catch (Exception e)
{
Console.WriteLine ("Exception: \n\tError Message = " + e.Message);
}
}
}
class TypeLoadExceptionDemoClass3
{
// A call to this method will raise a TypeLoadException.
[DllImport("NonExistentDLL.DLL", EntryPoint="MethodNotExists")]
public static extern void NonExistentMethod();
public static void GenerateException()
{
try
{
NonExistentMethod();
}
catch (TypeLoadException e)
{
// Rethrow exception with the exception as inner exception
throw new TypeLoadException("This exception was raised due to a call to an invalid method.", e);
}
}
}
Imports System.Runtime.InteropServices
Public Class TypeLoadException_Constructor3
Public Shared Sub Main()
Console.WriteLine("Calling a method in a non-existent DLL which triggers a TypeLoadException.")
Try
TypeLoadExceptionDemoClass.GenerateException()
Catch e As TypeLoadException
Console.WriteLine(("TypeLoadException: " + ControlChars.Cr + ControlChars.Tab + "Error Message = " + e.Message))
Console.WriteLine(("TypeLoadException: " + ControlChars.Cr + ControlChars.Tab + "InnerException Message = " + e.InnerException.Message))
Catch e As Exception
Console.WriteLine(("Exception: " + ControlChars.Cr + ControlChars.Tab + "Error Message = " + e.Message))
End Try
End Sub
End Class
Class TypeLoadExceptionDemoClass
' A call to this method will raise a TypeLoadException.
Public Declare Sub NonExistentMethod Lib "NonExistentDLL.DLL" Alias "MethodNotExists" ()
Public Shared Sub GenerateException()
Try
NonExistentMethod()
Catch e As TypeLoadException
' Rethrow exception with the exception as inner exception
Throw New TypeLoadException("This exception was raised due to a call to an invalid method.", e)
End Try
End Sub
End Class
備註
直接因為前一個例外狀況而擲回的例外狀況可能包含對 InnerException 屬性中前一個例外狀況的參考。
InnerException 屬性傳回的值會與傳入建構函式的值相同,或傳回 null
(如果 InnerException 屬性未提供內部例外狀況值給建構函式)。
下表顯示 TypeLoadException 執行個體的初始屬性值。
屬性 | 值 |
---|---|
InnerException | 內部例外狀況參考。 |
Message | 錯誤訊息字串。 |