FieldInfo.IsInitOnly Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera wartość wskazującą, czy pole można ustawić tylko w treści konstruktora.
public:
property bool IsInitOnly { bool get(); };
public bool IsInitOnly { get; }
member this.IsInitOnly : bool
Public ReadOnly Property IsInitOnly As Boolean
Wartość właściwości
true
jeśli pole ma InitOnly
ustawiony atrybut; false
w przeciwnym razie .
Implementuje
Przykłady
W poniższym przykładzie są tworzone dwa pola. Drugie pole jest tylko do odczytu, bez ustawionego dostępu i IsInitOnly
jest ustawione na true
wartość .
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
Ten kod spowoduje wygenerowanie następujących danych wyjściowych:
Reflection.FieldInfo
Myfielda - A- modified, IsInitOnly = False
Myfieldb - B readonly field, IsInitOnly = True
Uwagi
Jeśli zwracana wartość to true
, pole można zainicjować tylko wtedy i jest tylko do odczytu.
Aby uzyskać właściwość, najpierw pobierz klasę IsInitOnly
Type
. W pliku Type
pobierz element FieldInfo
. Z obiektu FieldInfo
pobierz IsInitOnly
właściwość . Aby uzyskać dostęp do pola innego niż publiczny, połącz się BindingFlags.NonPublic z metodą lub obie BindingFlags.StaticBindingFlags.Instance z GetField
nich.
Właściwość IsInitOnly
jest ustawiana po ustawieniu atrybutu FieldAttributes.InitOnly .