FieldInfo.IsInitOnly Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft einen Wert ab, der angibt, ob das Feld nur im Rumpf des Konstruktors festgelegt werden kann.
public:
property bool IsInitOnly { bool get(); };
public bool IsInitOnly { get; }
member this.IsInitOnly : bool
Public ReadOnly Property IsInitOnly As Boolean
Eigenschaftswert
true
, wenn für das Feld das InitOnly
-Attribut festgelegt ist, andernfalls false
.
Implementiert
Beispiele
Im folgenden Beispiel werden zwei Felder erstellt. Das zweite Feld ist schreibgeschützt, verfügt über keinen set-Accessor und IsInitOnly
ist auf true
festgelegt.
using namespace System;
using namespace System::Reflection;
//Make two fields, one public and one read-only.
public ref class Myfielda
{
public:
String^ field;
Myfielda()
: field( "A - public field" )
{}
property String^ Field
{
String^ get()
{
return field;
}
void set( String^ value )
{
if ( field != value )
{
field = value;
}
}
}
};
public ref class Myfieldb
{
private:
String^ const field;
public:
Myfieldb()
: field( "B - readonly field" )
{}
property String^ Field
{
String^ get()
{
return field;
}
}
};
int main()
{
Console::WriteLine( "\nReflection.FieldInfo" );
Myfielda^ myfielda = gcnew Myfielda;
Myfieldb^ myfieldb = gcnew Myfieldb;
//Get the Type and FieldInfo.
Type^ MyTypea = Type::GetType( "Myfielda" );
FieldInfo^ Myfieldinfoa = MyTypea->GetField( "field", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
Type^ MyTypeb = Type::GetType( "Myfieldb" );
FieldInfo^ Myfieldinfob = MyTypeb->GetField( "field", static_cast<BindingFlags>(BindingFlags::NonPublic | BindingFlags::Instance) );
//Modify the fields.
//Note that Myfieldb is not modified, as it is
//read-only (IsInitOnly is True).
myfielda->field = "A- modified";
//Myfieldb.field = "B- modified";
//For the first field, get and display the name, field, and IsInitOnly state.
Console::Write( "\n{0} - {1}, IsInitOnly = {2} ", MyTypea->FullName, Myfieldinfoa->GetValue( myfielda ), Myfieldinfoa->IsInitOnly );
//For the second field get and display the name, field, and IsInitOnly state.
Console::Write( "\n{0} - {1}, IsInitOnly = {2} ", MyTypeb->FullName, Myfieldinfob->GetValue( myfieldb ), Myfieldinfob->IsInitOnly );
return 0;
}
using System;
using System.Reflection;
//Make two fields, one public and one read-only.
public class Myfielda
{
public string field = "A - public modifiable field";
}
public class Myfieldb
{
public readonly string field = "B - readonly field";
}
public class Myfieldinfo
{
public static int Main()
{
Console.WriteLine("\nReflection.FieldInfo");
Myfielda Myfielda = new Myfielda();
Myfieldb Myfieldb = new Myfieldb();
//Get the Type and FieldInfo.
Type MyTypea = typeof(Myfielda);
FieldInfo Myfieldinfoa = MyTypea.GetField("field",
BindingFlags.Public | BindingFlags.Instance);
Type MyTypeb = typeof(Myfieldb);
FieldInfo Myfieldinfob = MyTypeb.GetField("field",
BindingFlags.Public | BindingFlags.Instance);
//Modify the fields.
//Note that Myfieldb is not modified, as it is
//read-only (IsInitOnly is True).
Myfielda.field = "A - modified";
//Myfieldb.field = "B - modified";
//For the first field, get and display the name, field, and IsInitOnly state.
Console.Write("\n{0} - {1}, IsInitOnly = {2} ",
MyTypea.FullName,
Myfieldinfoa.GetValue(Myfielda),
Myfieldinfoa.IsInitOnly);
//For the second field get and display the name, field, and IsInitOnly state.
Console.Write("\n{0} - {1}, IsInitOnly = {2} ",
MyTypeb.FullName,
Myfieldinfob.GetValue(Myfieldb),
Myfieldinfob.IsInitOnly);
return 0;
}
}
Imports System.Reflection
'Make two fields, one public and one read-only.
Public Class Myfielda
Public field As String = "A - public modifiable field"
End Class
Public Class Myfieldb
Public ReadOnly field As String = "B - readonly field"
End Class
Public Class Myfieldinfo
Public Shared Function Main() As Integer
Console.WriteLine("Reflection.FieldInfo")
Console.WriteLine()
Dim Myfielda As New Myfielda()
Dim Myfieldb As New Myfieldb()
'Get the Type and FieldInfo.
Dim MyTypea As Type = GetType(Myfielda)
Dim Myfieldinfoa As FieldInfo = MyTypea.GetField("field", _
BindingFlags.Public Or BindingFlags.Instance)
Dim MyTypeb As Type = GetType(Myfieldb)
Dim Myfieldinfob As FieldInfo = MyTypeb.GetField("field", _
BindingFlags.Public Or BindingFlags.Instance)
'Modify the fields.
'Note that Myfieldb is not modified, as it is
'read-only (IsInitOnly is True).
Myfielda.field = "A - modified"
'For the first field, get and display the name, field, and IsInitOnly state.
Console.WriteLine("{0} - {1}, IsInitOnly = {2} ", MyTypea.FullName, _
Myfieldinfoa.GetValue(Myfielda), Myfieldinfoa.IsInitOnly)
'For the second field get and display the name, field, and IsInitOnly state.
Console.WriteLine("{0} - {1}, IsInitOnly = {2} ", MyTypeb.FullName, _
Myfieldinfob.GetValue(Myfieldb), Myfieldinfob.IsInitOnly)
Return 0
End Function 'Main
End Class
Dieser Code erzeugt die folgende Ausgabe:
Reflection.FieldInfo
Myfielda - A- modified, IsInitOnly = False
Myfieldb - B readonly field, IsInitOnly = True
Hinweise
Wenn der zurückgegebene Wert ist true
, kann das Feld nur initialisiert werden und ist danach schreibgeschützt.
Um die IsInitOnly
-Eigenschaft abzurufen, rufen Sie zuerst die -Klasse Type
ab. Rufen Sie FieldInfo
von abType
. Rufen Sie aus die FieldInfo
-Eigenschaft ab IsInitOnly
. Um auf ein nicht öffentliches Feld zuzugreifen, kombinieren Sie BindingFlags.NonPublic entweder mit oder mit beiden von BindingFlags.Static und BindingFlags.Instance in der GetField
-Methode.
Die IsInitOnly
-Eigenschaft wird festgelegt, wenn das FieldAttributes.InitOnly Attribut festgelegt wird.