FieldInfo.SetValue Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengatur nilai bidang untuk objek yang diberikan ke nilai yang diberikan.
Overload
SetValue(Object, Object) |
Mengatur nilai bidang yang didukung oleh objek yang diberikan. |
SetValue(Object, Object, BindingFlags, Binder, CultureInfo) |
Saat ditimpa di kelas turunan, menetapkan nilai bidang yang didukung oleh objek yang diberikan. |
SetValue(Object, Object)
- Sumber:
- FieldInfo.cs
- Sumber:
- FieldInfo.cs
- Sumber:
- FieldInfo.cs
Mengatur nilai bidang yang didukung oleh objek yang diberikan.
public:
virtual void SetValue(System::Object ^ obj, System::Object ^ value);
public:
void SetValue(System::Object ^ obj, System::Object ^ value);
public virtual void SetValue (object obj, object value);
public void SetValue (object? obj, object? value);
public void SetValue (object obj, object value);
abstract member SetValue : obj * obj -> unit
override this.SetValue : obj * obj -> unit
member this.SetValue : obj * obj -> unit
Public Overridable Sub SetValue (obj As Object, value As Object)
Public Sub SetValue (obj As Object, value As Object)
Parameter
- obj
- Object
Objek yang nilai bidangnya akan diatur.
- value
- Object
Nilai yang akan ditetapkan ke bidang .
Penerapan
Pengecualian
Pemanggil tidak memiliki izin untuk mengakses bidang ini.
Catatan: Di .NET untuk aplikasi Bursa Windows atau Pustaka Kelas Portabel, tangkap pengecualian kelas dasar, MemberAccessException, sebagai gantinya.
Parameter obj
adalah null
dan bidang adalah bidang instans.
Catatan: Di .NET untuk aplikasi Bursa Windows atau Pustaka Kelas Portabel, tangkap Exception sebagai gantinya.
Bidang tidak ada pada objek.
-atau-
Parameter value
tidak dapat dikonversi dan disimpan di bidang .
Contoh
Contoh berikut mengatur nilai bidang, mendapatkan dan menampilkan nilai, memodifikasi bidang, dan menampilkan hasilnya.
using namespace System;
using namespace System::Reflection;
using namespace System::Globalization;
public ref class Example
{
private:
String^ myString;
public:
Example()
{
myString = "Old value";
}
property String^ StringProperty
{
String^ get()
{
return myString;
}
}
};
int main()
{
Example^ myObject = gcnew Example;
Type^ myType = Example::typeid;
FieldInfo^ myFieldInfo = myType->GetField( "myString",
BindingFlags::NonPublic | BindingFlags::Instance);
// Display the string before applying SetValue to the field.
Console::WriteLine( "\nThe field value of myString is \"{0}\".",
myFieldInfo->GetValue( myObject ) );
// Display the SetValue signature used to set the value of a field.
Console::WriteLine( "Applying SetValue(Object, Object)." );
// Change the field value using the SetValue method.
myFieldInfo->SetValue( myObject, "New value" );
// Display the string after applying SetValue to the field.
Console::WriteLine( "The field value of mystring is \"{0}\".",
myFieldInfo->GetValue(myObject));
}
/* This code produces the following output:
The field value of myString is "Old value".
Applying SetValue(Object, Object).
The field value of mystring is "New value".
*/
using System;
using System.Reflection;
using System.Globalization;
public class Example
{
private string myString;
public Example()
{
myString = "Old value";
}
public string StringProperty
{
get
{
return myString;
}
}
}
public class FieldInfo_SetValue
{
public static void Main()
{
Example myObject = new Example();
Type myType = typeof(Example);
FieldInfo myFieldInfo = myType.GetField("myString",
BindingFlags.NonPublic | BindingFlags.Instance);
// Display the string before applying SetValue to the field.
Console.WriteLine( "\nThe field value of myString is \"{0}\".",
myFieldInfo.GetValue(myObject));
// Display the SetValue signature used to set the value of a field.
Console.WriteLine( "Applying SetValue(Object, Object).");
// Change the field value using the SetValue method.
myFieldInfo.SetValue(myObject, "New value");
// Display the string after applying SetValue to the field.
Console.WriteLine( "The field value of mystring is \"{0}\".",
myFieldInfo.GetValue(myObject));
}
}
/* This code example produces the following output:
The field value of myString is "Old value".
Applying SetValue(Object, Object).
The field value of mystring is "New value".
*/
Imports System.Reflection
Imports System.Globalization
Public Class Example
Private myString As String
Public Sub New()
myString = "Old value"
End Sub
ReadOnly Property StringProperty() As String
Get
Return myString
End Get
End Property
End Class
Public Module FieldInfo_SetValue
Sub Main()
Dim myObject As New Example()
Dim myType As Type = GetType(Example)
Dim myFieldInfo As FieldInfo = myType.GetField("myString", _
BindingFlags.NonPublic Or BindingFlags.Instance)
' Display the string before applying SetValue to the field.
Console.WriteLine(vbCrLf & "The field value of myString is ""{0}"".", _
myFieldInfo.GetValue(myObject))
' Display the SetValue signature used to set the value of a field.
Console.WriteLine("Applying SetValue(Object, Object).")
' Change the field value using the SetValue method.
myFieldInfo.SetValue(myObject, "New value")
' Display the string after applying SetValue to the field.
Console.WriteLine("The field value of mystring is ""{0}"".", _
myFieldInfo.GetValue(myObject))
End Sub
End Module
' This code example produces the following output:
' The field value of myString is "Old value".
' Applying SetValue(Object, Object).
' The field value of mystring is "New value".
Keterangan
Metode ini akan menetapkan value
ke bidang yang tercermin oleh instans ini pada objek obj
. Jika bidang statis, obj
akan diabaikan. Untuk bidang non-statis, obj
harus berupa instans kelas yang mewarisi atau mendeklarasikan bidang . Nilai baru diteruskan sebagai Object
. Misalnya, jika jenis bidang adalah Boolean, instans Object
dengan nilai Boolean yang sesuai akan diteruskan. Sebelum mengatur nilai, SetValue
periksa untuk melihat apakah pengguna memiliki izin akses. Metode akhir ini adalah metode kenyamanan untuk memanggil metode berikut SetValue
.
Metode ini tidak dapat digunakan untuk mengatur nilai bidang statis, init-only (readonly
dalam C#) dengan andal. Di .NET Core 3.0 dan versi yang lebih baru, pengecualian dilemparkan jika Anda mencoba mengatur nilai pada bidang statis khusus init.
Catatan
Kode yang sepenuhnya tepercaya memiliki izin yang diperlukan untuk mengakses dan memanggil konstruktor, metode, bidang, dan properti privat menggunakan refleksi.
Catatan
Dimulai dengan Paket Layanan .NET Framework 2.0 1, metode ini dapat digunakan untuk mengakses anggota non-publik jika pemanggil telah diberikan ReflectionPermission dengan ReflectionPermissionFlag.RestrictedMemberAccess bendera dan jika set pemberian anggota non-publik dibatasi untuk set pemberian penelepon, atau subsetnya. (Lihat Pertimbangan Keamanan untuk Refleksi.)
Untuk menggunakan fungsionalitas ini, aplikasi Anda harus menargetkan .NET Framework 3.5 atau yang lebih baru.
Berlaku untuk
SetValue(Object, Object, BindingFlags, Binder, CultureInfo)
- Sumber:
- FieldInfo.cs
- Sumber:
- FieldInfo.cs
- Sumber:
- FieldInfo.cs
Saat ditimpa di kelas turunan, menetapkan nilai bidang yang didukung oleh objek yang diberikan.
public:
abstract void SetValue(System::Object ^ obj, System::Object ^ value, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Globalization::CultureInfo ^ culture);
public abstract void SetValue (object? obj, object? value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, System.Globalization.CultureInfo? culture);
public abstract void SetValue (object obj, object value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Globalization.CultureInfo culture);
abstract member SetValue : obj * obj * System.Reflection.BindingFlags * System.Reflection.Binder * System.Globalization.CultureInfo -> unit
Public MustOverride Sub SetValue (obj As Object, value As Object, invokeAttr As BindingFlags, binder As Binder, culture As CultureInfo)
Parameter
- obj
- Object
Objek yang nilai bidangnya akan diatur.
- value
- Object
Nilai yang akan ditetapkan ke bidang .
- invokeAttr
- BindingFlags
Bidang Binder
yang menentukan jenis pengikatan yang diinginkan (misalnya, Binder.CreateInstance
atau Binder.ExactBinding
).
- binder
- Binder
Sekumpulan properti yang memungkinkan pengikatan, pemaksian jenis argumen, dan pemanggilan anggota melalui refleksi. Jika binder
adalah null
, maka Binder.DefaultBinding
digunakan.
- culture
- CultureInfo
Preferensi perangkat lunak dari budaya tertentu.
Penerapan
Pengecualian
Pemanggil tidak memiliki izin untuk mengakses bidang ini.
Parameter obj
adalah null
dan bidang adalah bidang instans.
Bidang tidak ada pada objek.
-atau-
Parameter value
tidak dapat dikonversi dan disimpan di bidang .
Keterangan
Metode ini akan menetapkan value
ke bidang yang tercermin oleh instans ini pada obj
. Jika bidang statis, obj
akan diabaikan. Untuk bidang non-statis, obj
harus berupa instans kelas yang mewarisi atau mendeklarasikan bidang . Nilai baru diteruskan sebagai Object
. Misalnya, jika jenis bidang adalah Boolean
, instans Object
dengan nilai Boolean yang sesuai akan diteruskan. Sebelum mengatur nilai, SetValue
periksa untuk melihat apakah pengguna memiliki izin akses.
Metode ini tidak dapat digunakan untuk mengatur nilai bidang statis, init-only (readonly
dalam C#) dengan andal. Di .NET Core 3.0 dan versi yang lebih baru, pengecualian dilemparkan jika Anda mencoba mengatur nilai pada bidang statis khusus init.
Catatan
Kode yang sepenuhnya tepercaya memiliki izin yang diperlukan untuk mengakses dan memanggil konstruktor, metode, bidang, dan properti privat menggunakan refleksi.
Catatan
Dimulai dengan Paket Layanan .NET Framework 2.0 1, metode ini dapat digunakan untuk mengakses anggota non-publik jika pemanggil telah diberikan ReflectionPermission dengan ReflectionPermissionFlag.RestrictedMemberAccess bendera dan jika set pemberian anggota non-publik dibatasi untuk set pemberian penelepon, atau subsetnya. (Lihat Pertimbangan Keamanan untuk Refleksi.)
Untuk menggunakan fungsionalitas ini, aplikasi Anda harus menargetkan .NET Framework 3.5 atau yang lebih baru.