C#中如果属性的set的方法的内部调用了其他的方法,反射设置属性的值时会调用属性set的内部调用了的其他的方法吗
时间: 2024-09-19 22:18:19 浏览: 37
C#反射(Reflection)对类的属性get或set值实现思路
在C#中,当你通过反射API设置属性的值时,直接操作的是属性本身的setter方法。无论这个setter方法内部是否调用了其他方法,反射只会在调用setter的时候执行。如果你想要控制setter内部的逻辑,你需要在setter方法中处理这部分代码,而不是依赖于反射的行为。
例如:
```csharp
public class MyClass
{
public string MyProperty { get; set; }
// setter调用了另一个方法
protected void SetMyProperty(string value)
{
Validate(value); // 这里假设Validate是一个辅助验证方法
MyProperty = value;
}
}
// 使用反射时
var obj = Activator.CreateInstance<MyClass>();
typeof(MyClass).GetProperty("MyProperty").SetValue(obj, "test", null);
```
在这个例子中,`GetValue`方法只会调用`SetMyProperty`方法,而不会去执行`Validate`方法。如果你想让`Validate`方法也在反射设置值时被执行,那么就需要在setter方法中显式地调用它。
阅读全文