PropertyInfo.SetValue Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Définit la valeur de propriété d’un objet spécifié.
Surcharges
SetValue(Object, Object) |
Définit la valeur de propriété d’un objet spécifié. |
SetValue(Object, Object, Object[]) |
Définit la valeur de propriété d’un objet spécifié avec des valeurs d’index facultatives pour les propriétés d’index. |
SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo) |
En cas de substitution dans une classe dérivée, définit la valeur de propriété d’un objet spécifié qui a les informations spécifiques à la culture, à l’index et à la liaison spécifiées. |
SetValue(Object, Object)
- Source:
- PropertyInfo.cs
- Source:
- PropertyInfo.cs
- Source:
- PropertyInfo.cs
Définit la valeur de propriété d’un objet spécifié.
public:
void SetValue(System::Object ^ obj, System::Object ^ value);
public void SetValue (object obj, object value);
public void SetValue (object? obj, object? value);
member this.SetValue : obj * obj -> unit
Public Sub SetValue (obj As Object, value As Object)
Paramètres
- obj
- Object
Objet dont la valeur de propriété sera définie.
- value
- Object
Nouvelle valeur de propriété.
Exceptions
L’accesseur set
de la propriété est introuvable.
-ou-
value
ne peut pas être converti en type de PropertyType.
Le type de obj
ne correspond pas au type cible, ou une propriété est une propriété d’instance, mais obj
est null
.
Remarque : dans
Il y avait une tentative illégale d’accès à une méthode privée ou protégée à l’intérieur d’une classe.
Remarque : Dans .NET pour les applications du Windows Store ou la bibliothèque de classes portable , interceptez l’exception de classe de base, MemberAccessException, à la place.
Une erreur s’est produite lors de la définition de la valeur de la propriété. La propriété InnerException indique la raison de l’erreur.
Exemples
L’exemple suivant déclare une classe nommée Example
avec un static
(Shared
en Visual Basic) et une propriété d’instance. L’exemple utilise la méthode SetValue(Object, Object) pour modifier les valeurs de propriété d’origine et afficher les valeurs d’origine et finales.
using namespace System;
using namespace System::Reflection;
ref class Example
{
private:
int static _sharedProperty = 41;
int _instanceProperty;
public:
Example()
{
_instanceProperty = 42;
};
static property int SharedProperty
{
int get() { return _sharedProperty; }
void set(int value) { _sharedProperty = value; }
};
property int InstanceProperty
{
int get() { return _instanceProperty; }
void set(int value) { _instanceProperty = value; }
};
};
void main()
{
Console::WriteLine("Initial value of static property: {0}",
Example::SharedProperty);
PropertyInfo^ piShared =
Example::typeid->GetProperty("SharedProperty");
piShared->SetValue(nullptr, 76, nullptr);
Console::WriteLine("New value of static property: {0}",
Example::SharedProperty);
Example^ exam = gcnew Example();
Console::WriteLine("\nInitial value of instance property: {0}",
exam->InstanceProperty);
PropertyInfo^ piInstance =
Example::typeid->GetProperty("InstanceProperty");
piInstance->SetValue(exam, 37, nullptr);
Console::WriteLine("New value of instance property: {0}",
exam->InstanceProperty);
};
/* The example displays the following output:
Initial value of static property: 41
New value of static property: 76
Initial value of instance property: 42
New value of instance property: 37
*/
using System;
using System.Reflection;
class Example
{
private static int _staticProperty = 41;
private int _instanceProperty = 42;
// Declare a public static property.
public static int StaticProperty
{
get { return _staticProperty; }
set { _staticProperty = value; }
}
// Declare a public instance property.
public int InstanceProperty
{
get { return _instanceProperty; }
set { _instanceProperty = value; }
}
public static void Main()
{
Console.WriteLine("Initial value of static property: {0}",
Example.StaticProperty);
// Get a type object that represents the Example type.
Type examType = typeof(Example);
// Change the static property value.
PropertyInfo piShared = examType.GetProperty("StaticProperty");
piShared.SetValue(null, 76);
Console.WriteLine("New value of static property: {0}",
Example.StaticProperty);
// Create an instance of the Example class.
Example exam = new Example();
Console.WriteLine("\nInitial value of instance property: {0}",
exam.InstanceProperty);
// Change the instance property value.
PropertyInfo piInstance = examType.GetProperty("InstanceProperty");
piInstance.SetValue(exam, 37);
Console.WriteLine("New value of instance property: {0}",
exam.InstanceProperty);
}
}
// The example displays the following output:
// Initial value of static property: 41
// New value of static property: 76
//
// Initial value of instance property: 42
// New value of instance property: 37
Imports System.Reflection
Class Example
Private Shared _sharedProperty As Integer = 41
Private _instanceProperty As Integer = 42
' Declare a public static (shared) property.
Public Shared Property SharedProperty As Integer
Get
Return _sharedProperty
End Get
Set
_sharedProperty = Value
End Set
End Property
' Declare a public instance property.
Public Property InstanceProperty As Integer
Get
Return _instanceProperty
End Get
Set
_instanceProperty = Value
End Set
End Property
Public Shared Sub Main()
Console.WriteLine("Initial value of shared property: {0}",
Example.SharedProperty)
' Get a type object that represents the Example type.
Dim examType As Type = GetType(Example)
' Change the static (shared) property value.
Dim piShared As PropertyInfo = examType.GetProperty("SharedProperty")
piShared.SetValue(Nothing, 76)
Console.WriteLine("New value of shared property: {0}",
Example.SharedProperty)
Console.WriteLine()
' Create an instance of the Example class.
Dim exam As New Example
Console.WriteLine("Initial value of instance property: {0}",
exam.InstanceProperty)
' Change the instance property value.
Dim piInstance As PropertyInfo = examType.GetProperty("InstanceProperty")
piInstance.SetValue(exam, 37)
Console.WriteLine("New value of instance property: {0}", _
exam.InstanceProperty)
End Sub
End Class
' The example displays the following output:
' Initial value of shared property: 41
' New value of shared property: 76
'
' Initial value of instance property: 42
' New value of instance property: 37
Remarques
La surcharge SetValue(Object, Object) définit la valeur d’une propriété non indexée. Pour déterminer si une propriété est indexée, appelez la méthode GetIndexParameters. Si le tableau résultant a 0 (zéro), la propriété n’est pas indexée. Pour définir la valeur d’une propriété indexée, appelez la surcharge SetValue(Object, Object, Object[]).
Si le type de propriété de cet objet PropertyInfo est un type valeur et value
est null
, la propriété est définie sur la valeur par défaut de ce type.
Il s’agit d’une méthode pratique qui appelle l’implémentation runtime de la méthode SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo) abstraite, en spécifiant BindingFlags.Default pour le paramètre BindingFlags
, null
pour Binder
, null
pour Object[]
et null
pour CultureInfo
.
Pour utiliser la méthode SetValue, commencez par obtenir un objet Type qui représente la classe. À partir de la Type, obtenez l’objet PropertyInfo. À partir de l’objet PropertyInfo, appelez la méthode SetValue.
Note
À compter de .NET Framework 2.0, cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu ReflectionPermission avec l’indicateur de ReflectionPermissionFlag.RestrictedMemberAccess et si l’ensemble d’octroi des membres non publics est limité à l’ensemble d’octrois de l’appelant ou à un sous-ensemble de celui-ci. (Consultez considérations relatives à la sécurité pour la réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5 ou version ultérieure.
S’applique à
SetValue(Object, Object, Object[])
- Source:
- PropertyInfo.cs
- Source:
- PropertyInfo.cs
- Source:
- PropertyInfo.cs
Définit la valeur de propriété d’un objet spécifié avec des valeurs d’index facultatives pour les propriétés d’index.
public:
virtual void SetValue(System::Object ^ obj, System::Object ^ value, cli::array <System::Object ^> ^ index);
public virtual void SetValue (object obj, object value, object[] index);
public virtual void SetValue (object? obj, object? value, object?[]? index);
abstract member SetValue : obj * obj * obj[] -> unit
override this.SetValue : obj * obj * obj[] -> unit
Public Overridable Sub SetValue (obj As Object, value As Object, index As Object())
Paramètres
- obj
- Object
Objet dont la valeur de propriété sera définie.
- value
- Object
Nouvelle valeur de propriété.
- index
- Object[]
Valeurs d’index facultatives pour les propriétés indexées. Cette valeur doit être null
pour les propriétés non indexées.
Implémente
Exceptions
Le tableau index
ne contient pas le type d’arguments nécessaire.
-ou-
L’accesseur set
de la propriété est introuvable.
-ou-
value
ne peut pas être converti en type de PropertyType.
L’objet ne correspond pas au type cible, ou une propriété est une propriété d’instance, mais obj
est null
.
Remarque : dans
Le nombre de paramètres dans index
ne correspond pas au nombre de paramètres pris par la propriété indexée.
Il y avait une tentative illégale d’accès à une méthode privée ou protégée à l’intérieur d’une classe.
Remarque : Dans .NET pour les applications du Windows Store ou la bibliothèque de classes portable , interceptez l’exception de classe de base, MemberAccessException, à la place.
Une erreur s’est produite lors de la définition de la valeur de la propriété. Par exemple, une valeur d’index spécifiée pour une propriété indexée est hors plage. La propriété InnerException indique la raison de l’erreur.
Exemples
L’exemple suivant définit une classe nommée TestClass
qui a une propriété en lecture-écriture nommée Caption
. Elle affiche la valeur par défaut de la propriété Caption
, appelle la méthode SetValue pour modifier la valeur de la propriété et affiche le résultat.
using namespace System;
using namespace System::Reflection;
// Define a property.
public ref class TestClass
{
private:
String^ caption;
public:
TestClass()
{
caption = "A Default caption";
}
property String^ Caption
{
String^ get()
{
return caption;
}
void set( String^ value )
{
if ( caption != value )
{
caption = value;
}
}
}
};
int main()
{
TestClass^ t = gcnew TestClass;
// Get the type and PropertyInfo.
Type^ myType = t->GetType();
PropertyInfo^ pinfo = myType->GetProperty( "Caption" );
// Display the property value, using the GetValue method.
Console::WriteLine( "\nGetValue: {0}", pinfo->GetValue( t, nullptr ) );
// Use the SetValue method to change the caption.
pinfo->SetValue( t, "This caption has been changed.", nullptr );
// Display the caption again.
Console::WriteLine( "GetValue: {0}", pinfo->GetValue( t, nullptr ) );
Console::WriteLine( "\nPress the Enter key to continue." );
Console::ReadLine();
return 0;
}
/*
This example produces the following output:
GetValue: A Default caption
GetValue: This caption has been changed
Press the Enter key to continue.
*/
using System;
using System.Reflection;
// Define a class with a property.
public class TestClass
{
private string caption = "A Default caption";
public string Caption
{
get { return caption; }
set
{
if (caption != value)
{
caption = value;
}
}
}
}
class TestPropertyInfo
{
public static void Main()
{
TestClass t = new TestClass();
// Get the type and PropertyInfo.
Type myType = t.GetType();
PropertyInfo pinfo = myType.GetProperty("Caption");
// Display the property value, using the GetValue method.
Console.WriteLine("\nGetValue: " + pinfo.GetValue(t, null));
// Use the SetValue method to change the caption.
pinfo.SetValue(t, "This caption has been changed.", null);
// Display the caption again.
Console.WriteLine("GetValue: " + pinfo.GetValue(t, null));
Console.WriteLine("\nPress the Enter key to continue.");
Console.ReadLine();
}
}
/*
This example produces the following output:
GetValue: A Default caption
GetValue: This caption has been changed
Press the Enter key to continue.
*/
Imports System.Reflection
' Define a class with a property.
Public Class TestClass
Private myCaption As String = "A Default caption"
Public Property Caption() As String
Get
Return myCaption
End Get
Set
If myCaption <> value Then myCaption = value
End Set
End Property
End Class
Public Class TestPropertyInfo
Public Shared Sub Main()
Dim t As New TestClass()
' Get the type and PropertyInfo.
Dim myType As Type = t.GetType()
Dim pinfo As PropertyInfo = myType.GetProperty("Caption")
' Display the property value, using the GetValue method.
Console.WriteLine(vbCrLf & "GetValue: " & pinfo.GetValue(t, Nothing))
' Use the SetValue method to change the caption.
pinfo.SetValue(t, "This caption has been changed.", Nothing)
' Display the caption again.
Console.WriteLine("GetValue: " & pinfo.GetValue(t, Nothing))
Console.WriteLine(vbCrLf & "Press the Enter key to continue.")
Console.ReadLine()
End Sub
End Class
' This example produces the following output:
'
'GetValue: A Default caption
'GetValue: This caption has been changed
'
'Press the Enter key to continue.
Notez que, étant donné que la propriété Caption
n’est pas un tableau de paramètres, l’argument index
est null
.
L’exemple suivant déclare une classe nommée Example
avec trois propriétés : une propriété static
(Shared
en Visual Basic), une propriété d’instance et une propriété d’instance indexée. L’exemple utilise la méthode SetValue pour modifier les valeurs par défaut des propriétés et afficher les valeurs d’origine et finales.
Le nom utilisé pour rechercher une propriété d’instance indexée avec réflexion est différent en fonction de la langue et des attributs appliqués à la propriété.
Dans Visual Basic, le nom de la propriété est toujours utilisé pour rechercher la propriété avec réflexion. Vous pouvez utiliser le mot clé
Default
pour faire de la propriété une propriété indexée par défaut, auquel cas vous pouvez omettre le nom lors de l’accès à la propriété, comme dans cet exemple. Vous pouvez également utiliser le nom de la propriété.En C#, la propriété d’instance indexée est une propriété par défaut appelée indexeur, et le nom n’est jamais utilisé lors de l’accès à la propriété dans le code. Par défaut, le nom de la propriété est
Item
, et vous devez utiliser ce nom lorsque vous recherchez la propriété avec réflexion. Vous pouvez utiliser l’attribut IndexerNameAttribute pour donner à l’indexeur un autre nom. Dans cet exemple, le nom estIndexedInstanceProperty
.En C++, le spécificateur
default
peut être utilisé pour faire d’une propriété indexée une propriété indexée par défaut (indexeur de classe). Dans ce cas, le nom de la propriété par défaut estItem
, et vous devez utiliser ce nom lorsque vous recherchez la propriété avec réflexion, comme dans cet exemple. Vous pouvez utiliser l’attribut IndexerNameAttribute pour donner à l’indexeur de classe un autre nom en réflexion, mais vous ne pouvez pas utiliser ce nom pour accéder à la propriété dans le code. Une propriété indexée qui n’est pas un indexeur de classe est accessible à l’aide de son nom, à la fois dans le code et dans la réflexion.
using namespace System;
using namespace System::Reflection;
using namespace System::Collections::Generic;
ref class Example
{
private:
int static _sharedProperty = 41;
int _instanceProperty;
Dictionary<int, String^>^ _indexedInstanceProperty;
public:
Example()
{
_instanceProperty = 42;
_indexedInstanceProperty = gcnew Dictionary<int, String^>();
};
static property int SharedProperty
{
int get() { return _sharedProperty; }
void set(int value) { _sharedProperty = value; }
};
property int InstanceProperty
{
int get() { return _instanceProperty; }
void set(int value) { _instanceProperty = value; }
};
// By default, the name of the default indexed property (class
// indexer) is Item, and that name must be used to search for the
// property with reflection. The property can be given a different
// name by using the IndexerNameAttribute attribute.
property String^ default[int]
{
String^ get(int key)
{
String^ returnValue;
if (_indexedInstanceProperty->TryGetValue(key, returnValue))
{
return returnValue;
}
else
{
return nullptr;
}
}
void set(int key, String^ value)
{
if (value == nullptr)
{
throw gcnew ArgumentNullException(
"IndexedInstanceProperty value can be an empty string, but it cannot be null.");
}
else
{
if (_indexedInstanceProperty->ContainsKey(key))
{
_indexedInstanceProperty[key] = value;
}
else
{
_indexedInstanceProperty->Add(key, value);
}
}
}
};
};
void main()
{
Console::WriteLine("Initial value of class-level property: {0}",
Example::SharedProperty);
PropertyInfo^ piShared =
Example::typeid->GetProperty("SharedProperty");
piShared->SetValue(nullptr, 76, nullptr);
Console::WriteLine("Final value of class-level property: {0}",
Example::SharedProperty);
Example^ exam = gcnew Example();
Console::WriteLine("\nInitial value of instance property: {0}",
exam->InstanceProperty);
PropertyInfo^ piInstance =
Example::typeid->GetProperty("InstanceProperty");
piInstance->SetValue(exam, 37, nullptr);
Console::WriteLine("Final value of instance property: {0}",
exam->InstanceProperty);
exam[17] = "String number 17";
exam[46] = "String number 46";
exam[9] = "String number 9";
Console::WriteLine(
"\nInitial value of indexed instance property(17): '{0}'",
exam[17]);
// By default, the name of the default indexed property (class
// indexer) is Item, and that name must be used to search for the
// property with reflection. The property can be given a different
// name by using the IndexerNameAttribute attribute.
PropertyInfo^ piIndexedInstance =
Example::typeid->GetProperty("Item");
piIndexedInstance->SetValue(
exam,
"New value for string number 17",
gcnew array<Object^> { 17 });
Console::WriteLine("Final value of indexed instance property(17): '{0}'",
exam[17]);
};
/* This example produces the following output:
Initial value of class-level property: 41
Final value of class-level property: 76
Initial value of instance property: 42
Final value of instance property: 37
Initial value of indexed instance property(17): 'String number 17'
Final value of indexed instance property(17): 'New value for string number 17'
*/
using System;
using System.Reflection;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
class Example
{
private static int _staticProperty = 41;
public static int StaticProperty
{
get
{
return _staticProperty;
}
set
{
_staticProperty = value;
}
}
private int _instanceProperty = 42;
public int InstanceProperty
{
get
{
return _instanceProperty;
}
set
{
_instanceProperty = value;
}
}
private Dictionary<int, string> _indexedInstanceProperty =
new Dictionary<int, string>();
// By default, the indexer is named Item, and that name must be used
// to search for the property. In this example, the indexer is given
// a different name by using the IndexerNameAttribute attribute.
[IndexerNameAttribute("IndexedInstanceProperty")]
public string this[int key]
{
get
{
string returnValue = null;
if (_indexedInstanceProperty.TryGetValue(key, out returnValue))
{
return returnValue;
}
else
{
return null;
}
}
set
{
if (value == null)
{
throw new ArgumentNullException("IndexedInstanceProperty value can be an empty string, but it cannot be null.");
}
else
{
if (_indexedInstanceProperty.ContainsKey(key))
{
_indexedInstanceProperty[key] = value;
}
else
{
_indexedInstanceProperty.Add(key, value);
}
}
}
}
public static void Main()
{
Console.WriteLine("Initial value of class-level property: {0}",
Example.StaticProperty);
PropertyInfo piShared = typeof(Example).GetProperty("StaticProperty");
piShared.SetValue(null, 76, null);
Console.WriteLine("Final value of class-level property: {0}",
Example.StaticProperty);
Example exam = new Example();
Console.WriteLine("\nInitial value of instance property: {0}",
exam.InstanceProperty);
PropertyInfo piInstance =
typeof(Example).GetProperty("InstanceProperty");
piInstance.SetValue(exam, 37, null);
Console.WriteLine("Final value of instance property: {0}",
exam.InstanceProperty);
exam[17] = "String number 17";
exam[46] = "String number 46";
exam[9] = "String number 9";
Console.WriteLine(
"\nInitial value of indexed instance property(17): '{0}'",
exam[17]);
// By default, the indexer is named Item, and that name must be used
// to search for the property. In this example, the indexer is given
// a different name by using the IndexerNameAttribute attribute.
PropertyInfo piIndexedInstance =
typeof(Example).GetProperty("IndexedInstanceProperty");
piIndexedInstance.SetValue(
exam,
"New value for string number 17",
new object[] { (int) 17 });
Console.WriteLine(
"Final value of indexed instance property(17): '{0}'",
exam[17]);
}
}
/* This example produces the following output:
Initial value of class-level property: 41
Final value of class-level property: 76
Initial value of instance property: 42
Final value of instance property: 37
Initial value of indexed instance property(17): 'String number 17'
Final value of indexed instance property(17): 'New value for string number 17'
*/
Imports System.Reflection
Imports System.Collections.Generic
Class Example
Private Shared _sharedProperty As Integer = 41
Public Shared Property SharedProperty As Integer
Get
Return _sharedProperty
End Get
Set
_sharedProperty = Value
End Set
End Property
Private _instanceProperty As Integer = 42
Public Property InstanceProperty As Integer
Get
Return _instanceProperty
End Get
Set
_instanceProperty = Value
End Set
End Property
Private _indexedInstanceProperty As New Dictionary(Of Integer, String)
Default Public Property IndexedInstanceProperty(ByVal key As Integer) As String
Get
Dim returnValue As String = Nothing
If _indexedInstanceProperty.TryGetValue(key, returnValue) Then
Return returnValue
Else
Return Nothing
End If
End Get
Set
If Value Is Nothing Then
Throw New ArgumentNullException( _
"IndexedInstanceProperty value can be an empty string, but it cannot be Nothing.")
Else
If _indexedInstanceProperty.ContainsKey(key) Then
_indexedInstanceProperty(key) = Value
Else
_indexedInstanceProperty.Add(key, Value)
End If
End If
End Set
End Property
Shared Sub Main()
Console.WriteLine("Initial value of class-level property: {0}", _
Example.SharedProperty)
Dim piShared As PropertyInfo = _
GetType(Example).GetProperty("SharedProperty")
piShared.SetValue( _
Nothing, _
76, _
Nothing)
Console.WriteLine("Final value of class-level property: {0}", _
Example.SharedProperty)
Dim exam As New Example
Console.WriteLine(vbCrLf & _
"Initial value of instance property: {0}", _
exam.InstanceProperty)
Dim piInstance As PropertyInfo = _
GetType(Example).GetProperty("InstanceProperty")
piInstance.SetValue( _
exam, _
37, _
Nothing)
Console.WriteLine("Final value of instance property: {0}", _
exam.InstanceProperty)
exam(17) = "String number 17"
exam(46) = "String number 46"
' In Visual Basic, a default indexed property can also be referred
' to by name.
exam.IndexedInstanceProperty(9) = "String number 9"
Console.WriteLine(vbCrLf & _
"Initial value of indexed instance property(17): '{0}'", _
exam(17))
Dim piIndexedInstance As PropertyInfo = _
GetType(Example).GetProperty("IndexedInstanceProperty")
piIndexedInstance.SetValue( _
exam, _
"New value for string number 17", _
New Object() { CType(17, Integer) })
Console.WriteLine("Final value of indexed instance property(17): '{0}'", _
exam(17))
End Sub
End Class
' This example produces the following output:
'
'Initial value of class-level property: 41
'Final value of class-level property: 76
'
'Initial value of instance property: 42
'Final value of instance property: 37
'
'Initial value of indexed instance property(17): 'String number 17'
'Final value of indexed instance property(17): 'New value for string number 17'
Remarques
Si cet objet PropertyInfo est un type valeur et value
est null
, la propriété est définie sur la valeur par défaut de ce type.
Pour déterminer si une propriété est indexée, utilisez la méthode GetIndexParameters. Si le tableau résultant a 0 (zéro), la propriété n’est pas indexée.
Il s’agit d’une méthode pratique qui appelle l’implémentation runtime de la méthode de SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo) abstraite, en spécifiant BindingFlags.Default pour le paramètre BindingFlags
, null
pour Binder
et null
pour CultureInfo
.
Pour utiliser la méthode SetValue, commencez par obtenir un objet Type qui représente la classe. À partir du Type, obtenez le PropertyInfo. À partir de la PropertyInfo, utilisez la méthode SetValue.
Note
À compter de .NET Framework 2.0, cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu ReflectionPermission avec l’indicateur de ReflectionPermissionFlag.RestrictedMemberAccess et si l’ensemble d’octroi des membres non publics est limité à l’ensemble d’octrois de l’appelant ou à un sous-ensemble de celui-ci. (Consultez considérations relatives à la sécurité pour la réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5 ou version ultérieure.
S’applique à
SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo)
- Source:
- PropertyInfo.cs
- Source:
- PropertyInfo.cs
- Source:
- PropertyInfo.cs
En cas de substitution dans une classe dérivée, définit la valeur de propriété d’un objet spécifié qui a les informations spécifiques à la culture, à l’index et à la liaison spécifiées.
public:
abstract void SetValue(System::Object ^ obj, System::Object ^ value, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ index, System::Globalization::CultureInfo ^ culture);
public abstract void SetValue (object? obj, object? value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? index, System.Globalization.CultureInfo? culture);
public abstract void SetValue (object obj, object value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] index, System.Globalization.CultureInfo culture);
abstract member SetValue : obj * obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> unit
Public MustOverride Sub SetValue (obj As Object, value As Object, invokeAttr As BindingFlags, binder As Binder, index As Object(), culture As CultureInfo)
Paramètres
- obj
- Object
Objet dont la valeur de propriété sera définie.
- value
- Object
Nouvelle valeur de propriété.
- invokeAttr
- BindingFlags
Combinaison au niveau du bit des membres d’énumération suivants qui spécifient l’attribut d’appel : InvokeMethod
, CreateInstance
, Static
, GetField
, SetField
, GetProperty
ou SetProperty
. Vous devez spécifier un attribut d’appel approprié. Par exemple, pour appeler un membre statique, définissez l’indicateur Static
.
- binder
- Binder
Objet qui permet la liaison, la contrainte des types d’arguments, l’appel de membres et la récupération d’objets MemberInfo via la réflexion. Si binder
est null
, le classeur par défaut est utilisé.
- index
- Object[]
Valeurs d’index facultatives pour les propriétés indexées. Cette valeur doit être null
pour les propriétés non indexées.
- culture
- CultureInfo
Culture pour laquelle la ressource doit être localisée. Si la ressource n’est pas localisée pour cette culture, la propriété Parent sera appelée successivement à la recherche d’une correspondance. Si cette valeur est null
, les informations spécifiques à la culture sont obtenues à partir de la propriété CurrentUICulture.
Implémente
Exceptions
Le tableau index
ne contient pas le type d’arguments nécessaire.
-ou-
L’accesseur set
de la propriété est introuvable.
-ou-
value
ne peut pas être converti en type de PropertyType.
L’objet ne correspond pas au type cible, ou une propriété est une propriété d’instance, mais obj
est null
.
Le nombre de paramètres dans index
ne correspond pas au nombre de paramètres pris par la propriété indexée.
Il y avait une tentative illégale d’accès à une méthode privée ou protégée à l’intérieur d’une classe.
Une erreur s’est produite lors de la définition de la valeur de la propriété. Par exemple, une valeur d’index spécifiée pour une propriété indexée est hors plage. La propriété InnerException indique la raison de l’erreur.
Remarques
Si cet objet PropertyInfo est un type valeur et value
est null
, la propriété est définie sur la valeur par défaut de ce type.
Pour déterminer si une propriété est indexée, utilisez la méthode GetIndexParameters. Si le tableau résultant a 0 (zéro), la propriété n’est pas indexée.
Les restrictions d’accès sont ignorées pour le code entièrement approuvé. Autrement dit, des constructeurs privés, des méthodes, des champs et des propriétés sont accessibles et appelés via Reflection chaque fois que le code est entièrement approuvé.
Pour utiliser la méthode SetValue
, commencez par obtenir la classe Type
. À partir du Type
, obtenez le PropertyInfo
. À partir de la PropertyInfo
, utilisez la méthode SetValue
.
Note
À compter de .NET Framework 2.0, cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu ReflectionPermission avec l’indicateur de ReflectionPermissionFlag.RestrictedMemberAccess et si l’ensemble d’octroi des membres non publics est limité à l’ensemble d’octrois de l’appelant ou à un sous-ensemble de celui-ci. (Consultez considérations relatives à la sécurité pour la réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5 ou version ultérieure.