FieldInfo.SetValue Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Verilen nesne için alanın değerini verilen değere ayarlar.
Aşırı Yüklemeler
SetValue(Object, Object) |
Verilen nesne tarafından desteklenen alanın değerini ayarlar. |
SetValue(Object, Object, BindingFlags, Binder, CultureInfo) |
Türetilmiş bir sınıfta geçersiz kılındığında, verilen nesne tarafından desteklenen alanın değerini ayarlar. |
SetValue(Object, Object)
- Kaynak:
- FieldInfo.cs
- Kaynak:
- FieldInfo.cs
- Kaynak:
- FieldInfo.cs
Verilen nesne tarafından desteklenen alanın değerini ayarlar.
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)
Parametreler
- obj
- Object
Alan değeri ayarlanacak nesne.
- value
- Object
Alana atanacak değer.
Uygulamalar
Özel durumlar
Çağıranın bu alana erişme izni yok.
Not: Windows Mağazası uygulamaları için .NET'te veya Taşınabilir Sınıf Kitaplığı'nda bunun yerine temel sınıf özel durumunu MemberAccessExceptionyakalayın.
obj
parametresi ve null
alanı bir örnek alanıdır.
Not: Windows Mağazası uygulamaları için .NET'te veya Taşınabilir Sınıf Kitaplığı'nda bunun yerine yakalayın Exception .
alan nesnesinde yok.
-veya-
value
parametresi dönüştürülemez ve alanda depolanamaz.
Örnekler
Aşağıdaki örnek bir alanın değerini ayarlar, değeri alır ve görüntüler, alanı değiştirir ve sonucu görüntüler.
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".
Açıklamalar
Bu yöntem, nesnesinde obj
bu örnek tarafından yansıtılan alana atarvalue
. Alan statikse obj
yoksayılır. Statik olmayan alanlar için, obj
alanı devralan veya bildiren bir sınıfın örneği olmalıdır. Yeni değer olarak Object
geçirilir. Örneğin, alanın türü Boole ise, uygun Boole değerine sahip bir örneği Object
geçirilir. Değeri ayarlamadan önce, SetValue
kullanıcının erişim izni olup olmadığını denetler. Bu son yöntem, aşağıdaki SetValue
yöntemi çağırmak için kullanışlı bir yöntemdir.
Bu yöntem, statik, yalnızca başlatma (readonly
C#'de) alanlarının değerlerini güvenilir bir şekilde ayarlamak için kullanılamaz. .NET Core 3.0 ve sonraki sürümlerde, statik, yalnızca başlatma alanına değer ayarlamaya çalışırsanız bir özel durum oluşturulur.
Not
Tam olarak güvenilen kod, yansıma kullanarak özel oluşturuculara, yöntemlere, alanlara ve özelliklere erişmek ve çağırmak için gereken izinlere sahiptir.
Not
.NET Framework 2.0 Service Pack 1'den başlayarak bu yöntem, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve ortak olmayan üyelerin izin kümesinin çağıranın izin kümesiyle veya bunun bir alt kümesiyle ReflectionPermissionFlag.RestrictedMemberAccess sınırlı olması durumunda genel olmayan üyelere erişmek için kullanılabilir. (Bkz. Yansıma için GüvenlikLe İlgili Dikkat Edilmesi Gerekenler.)
Bu işlevselliği kullanmak için uygulamanızın .NET Framework 3.5 veya sonraki bir sürümü hedeflemesi gerekir.
Şunlara uygulanır
SetValue(Object, Object, BindingFlags, Binder, CultureInfo)
- Kaynak:
- FieldInfo.cs
- Kaynak:
- FieldInfo.cs
- Kaynak:
- FieldInfo.cs
Türetilmiş bir sınıfta geçersiz kılındığında, verilen nesne tarafından desteklenen alanın değerini ayarlar.
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)
Parametreler
- obj
- Object
Alan değeri ayarlanacak nesne.
- value
- Object
Alana atanacak değer.
- invokeAttr
- BindingFlags
İstenen bağlama türünü belirten bir alanı Binder
(örneğin, Binder.CreateInstance
veya Binder.ExactBinding
).
- binder
- Binder
Bağlamayı, bağımsız değişken türlerini zorlamayı ve yansıma aracılığıyla üyeleri çağırmayı sağlayan bir özellik kümesi. ise binder
null
Binder.DefaultBinding
kullanılır.
- culture
- CultureInfo
Belirli bir kültürün yazılım tercihleri.
Uygulamalar
Özel durumlar
Çağıranın bu alana erişme izni yok.
obj
parametresi ve null
alanı bir örnek alanıdır.
alan nesnesinde yok.
-veya-
value
parametresi dönüştürülemez ve alanda depolanamaz.
Açıklamalar
Bu yöntem, üzerinde bu örnek obj
tarafından yansıtılan alana atarvalue
. Alan statikse obj
yoksayılır. Statik olmayan alanlar için, obj
alanı devralan veya bildiren bir sınıfın örneği olmalıdır. Yeni değer olarak Object
geçirilir. Örneğin, alanın türü ise Boolean
, uygun Boole değerine sahip bir örneği Object
geçirilir. Değeri ayarlamadan önce, SetValue
kullanıcının erişim izni olup olmadığını denetler.
Bu yöntem, statik, yalnızca başlatma (readonly
C#'de) alanlarının değerlerini güvenilir bir şekilde ayarlamak için kullanılamaz. .NET Core 3.0 ve sonraki sürümlerde, statik, yalnızca başlatma alanına değer ayarlamaya çalışırsanız bir özel durum oluşturulur.
Not
Tam olarak güvenilen kod, yansıma kullanarak özel oluşturuculara, yöntemlere, alanlara ve özelliklere erişmek ve çağırmak için gereken izinlere sahiptir.
Not
.NET Framework 2.0 Service Pack 1'den başlayarak bu yöntem, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve ortak olmayan üyelerin izin kümesinin çağıranın izin kümesiyle veya bunun bir alt kümesiyle ReflectionPermissionFlag.RestrictedMemberAccess sınırlı olması durumunda genel olmayan üyelere erişmek için kullanılabilir. (Bkz. Yansıma için GüvenlikLe İlgili Dikkat Edilmesi Gerekenler.)
Bu işlevselliği kullanmak için uygulamanızın .NET Framework 3.5 veya sonraki bir sürümü hedeflemesi gerekir.