MethodBody.InitLocals Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает значение, которое определяет, будут ли локальные переменные в теле метода инициализированы значениями по умолчанию, предусмотренными для соответствующих типов.
public:
virtual property bool InitLocals { bool get(); };
public:
property bool InitLocals { bool get(); };
public virtual bool InitLocals { get; }
public bool InitLocals { get; }
member this.InitLocals : bool
Public Overridable ReadOnly Property InitLocals As Boolean
Public ReadOnly Property InitLocals As Boolean
Значение свойства
Значение true
, если тело метода содержит код, инициализирующий локальные переменные значениями null
для ссылочных типов, или нулевыми значениями для типов значений; в обратном случае — значение false
.
Примеры
В следующем примере кода определяется метод теста с именем MethodBodyExample
и отображаются сведения о локальных переменных и предложениях обработки исключений. Метод MethodBase.GetMethodBody используется для получения MethodBody объекта для метода теста. Отображаются MaxStackSize свойства и InitLocals .
Этот пример входит в состав более крупного примера использования класса MethodBody.
#using <System.dll>
using namespace System;
using namespace System::Reflection;
public ref class Example
{
// The Main method contains code to analyze this method, using
// the properties and methods of the MethodBody class.
public:
void MethodBodyExample(Object^ arg)
{
// Define some local variables. In addition to these variables,
// the local variable list includes the variables scoped to
// the catch clauses.
int var1 = 42;
String^ var2 = "Forty-two";
try
{
// Depending on the input value, throw an ArgumentException or
// an ArgumentNullException to test the Catch clauses.
if (arg == nullptr)
{
throw gcnew ArgumentNullException("The argument cannot " +
"be null.");
}
if (arg->GetType() == String::typeid)
{
throw gcnew ArgumentException("The argument cannot " +
"be a string.");
}
}
// There is no Filter clause in this code example. See the Visual
// Basic code for an example of a Filter clause.
// This catch clause handles the ArgumentException class, and
// any other class derived from Exception.
catch (ArgumentException^ ex)
{
Console::WriteLine("Ordinary exception-handling clause caught:" +
" {0}", ex->GetType());
}
finally
{
var1 = 3033;
var2 = "Another string.";
}
}
};
int main()
{
// Get method body information.
MethodInfo^ mi =
Example::typeid->GetMethod("MethodBodyExample");
MethodBody^ mb = mi->GetMethodBody();
Console::WriteLine("\r\nMethod: {0}", mi);
// Display the general information included in the
// MethodBody object.
Console::WriteLine(" Local variables are initialized: {0}",
mb->InitLocals);
Console::WriteLine(" Maximum number of items on the operand " +
"stack: {0}", mb->MaxStackSize);
using System;
using System.Reflection;
public class Example
{
public static void Main()
{
// Get method body information.
MethodInfo mi = typeof(Example).GetMethod("MethodBodyExample");
MethodBody mb = mi.GetMethodBody();
Console.WriteLine("\r\nMethod: {0}", mi);
// Display the general information included in the
// MethodBody object.
Console.WriteLine(" Local variables are initialized: {0}",
mb.InitLocals);
Console.WriteLine(" Maximum number of items on the operand stack: {0}",
mb.MaxStackSize);
Imports System.Reflection
Public Class Example
Public Shared Sub Main()
' Demonstrate the effect of the Visual Basic When keyword, which
' generates a Filter clause in the Try block.
Dim e As New Example()
Console.WriteLine()
e.MethodBodyExample("String argument")
e.MethodBodyExample(Nothing)
' Get method body information.
Dim mi As MethodInfo = _
GetType(Example).GetMethod("MethodBodyExample")
Dim mb As MethodBody = mi.GetMethodBody()
Console.WriteLine(vbCrLf & "Method: {0}", mi)
' Display the general information included in the
' MethodBody object.
Console.WriteLine(" Local variables are initialized: {0}", _
mb.InitLocals)
Console.WriteLine(" Maximum number of items on the operand stack: {0}", _
mb.MaxStackSize)
// The Main method contains code to analyze this method, using
// the properties and methods of the MethodBody class.
public:
void MethodBodyExample(Object^ arg)
{
// Define some local variables. In addition to these variables,
// the local variable list includes the variables scoped to
// the catch clauses.
int var1 = 42;
String^ var2 = "Forty-two";
try
{
// Depending on the input value, throw an ArgumentException or
// an ArgumentNullException to test the Catch clauses.
if (arg == nullptr)
{
throw gcnew ArgumentNullException("The argument cannot " +
"be null.");
}
if (arg->GetType() == String::typeid)
{
throw gcnew ArgumentException("The argument cannot " +
"be a string.");
}
}
// There is no Filter clause in this code example. See the Visual
// Basic code for an example of a Filter clause.
// This catch clause handles the ArgumentException class, and
// any other class derived from Exception.
catch (ArgumentException^ ex)
{
Console::WriteLine("Ordinary exception-handling clause caught:" +
" {0}", ex->GetType());
}
finally
{
var1 = 3033;
var2 = "Another string.";
}
}
}
// The Main method contains code to analyze this method, using
// the properties and methods of the MethodBody class.
public void MethodBodyExample(object arg)
{
// Define some local variables. In addition to these variables,
// the local variable list includes the variables scoped to
// the catch clauses.
int var1 = 42;
string var2 = "Forty-two";
try
{
// Depending on the input value, throw an ArgumentException or
// an ArgumentNullException to test the Catch clauses.
if (arg == null)
{
throw new ArgumentNullException("The argument cannot be null.");
}
if (arg.GetType() == typeof(string))
{
throw new ArgumentException("The argument cannot be a string.");
}
}
// This filter clause selects only exceptions that derive
// from the ArgumentException class.
// Other exceptions, including ArgumentException itself,
// are not handled by this filter clause.
catch (ArgumentException ex) when (ex.GetType().IsSubclassOf(typeof(ArgumentException)))
{
Console.WriteLine("Filter clause caught: {0}", ex.GetType());
}
// This catch clause handles the ArgumentException class, and
// any other class derived from Exception.
catch(Exception ex)
{
Console.WriteLine("Ordinary exception-handling clause caught: {0}",
ex.GetType());
}
finally
{
var1 = 3033;
var2 = "Another string.";
}
}
}
// This code example produces output similar to the following:
//
//Method: Void MethodBodyExample(System.Object)
// Local variables are initialized: True
// Maximum number of items on the operand stack: 2
End Sub
' This test method is executed at the beginning of Main, to show
' how the Filter clause works. The Filter clause is generated by
' a Visual Basic When expression. If arg is Nothing, this method
' throws ArgumentNullException, which is caught by the filter
' clause. If arg is a string, the method throws ArgumentException,
' which does not match the filter clause.
'
' Sub Main also contains code to analyze this method, using
' the properties and methods of the MethodBody class.
Public Sub MethodBodyExample(ByVal arg As Object)
' Define some local variables. In addition to these variables,
' the local variable list includes the variables scoped to
' the catch clauses.
Dim var1 As Integer = 42
Dim var2 As String = "Forty-two"
Try
' Depending on the input value, throw an ArgumentException or
' an ArgumentNullException to test the Catch clauses.
'
If arg Is Nothing Then
Throw New ArgumentNullException("The argument cannot be Nothing.")
End If
If arg.GetType() Is GetType(String) Then
Throw New ArgumentException("The argument cannot be a string.")
End If
' The When expression makes this a filter clause. The expression
' selects only exceptions that derive from the ArgumentException
' class. Other exceptions, including ArgumentException itself,
' are not handled by this filter clause.
Catch ex As ArgumentException _
When ex.GetType().IsSubclassOf(GetType(ArgumentException))
Console.WriteLine("Filter clause caught: {0}", ex.GetType())
' This catch clause handles the ArgumentException class, and
' any other class derived from Exception.
Catch ex As Exception
Console.WriteLine("Ordinary exception-handling clause caught: {0}", _
ex.GetType())
Finally
var1 = 3033
var2 = "Another string."
End Try
End Sub
End Class
' This code example produces output similar to the following:
'
'Ordinary exception-handling clause caught: System.ArgumentException
'Filter clause caught: System.ArgumentNullException
'
'Method: Void MethodBodyExample(System.Object)
' Local variables are initialized: True
' Maximum number of items on the operand stack: 3
Комментарии
Свойство InitLocals ссылается на переменные, которые не инициализированы явным образом, т. е. переменные, объявленные с помощью синтаксиса, например int x;
в C# или Dim x As Integer
в Visual Basic.
По умолчанию ссылочные переменные инициализируются null
в . Числовые переменные инициализируются нулевым значением.