有没有办法在c#中获得对成员函数或属性的自动引用?
我的意思是这样的:
class Foo {
bool prop;
public bool MyProp
{
get { return prop; }
set {
prop = value;
OnPropertyChanged(thismember);
}
}
}
' thismember'是一种自动引用类型为System.Reflection.PropertyInfo或System.Reflection.MemberInfo的调用属性(' MyProp')?
答案 0 :(得分:2)
接近你想要的东西是棱镜的BindableBase:
protected virtual bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (object.Equals((object) storage, (object) value))
return false;
storage = value;
this.OnPropertyChanged(propertyName);
return true;
}
它允许你这样做:
public bool MyProp
{
get { return prop; }
set {
SetProperty(ref prop, value);
}
}
你的viewmodel当然需要从bindablebase派生。
答案 1 :(得分:1)
目前,没有。但考虑到您的示例,C#6会对您有所帮助,因为nameof
运营商即将到来,请在此处查看https://msdn.microsoft.com/en-us/magazine/dn802602.aspx和https://roslyn.codeplex.com/discussions/570551
答案 2 :(得分:1)
不,没有这样的事情。
已讨论过的内容(暂时被丢弃,因为它非常复杂)是infoof
operator。这样的运算符可以返回传递给运算符的成员的MemberInfo
。
与您正在寻找的最接近的可能是来自C#6.0的即将到来的nameof
operator。虽然您仍然必须明确说明成员名称,但您至少会对成员名称进行编译时检查,因此如果您通过重命名重构您的成员,编译器将提醒您还需要指定新名称你调用nameof
运算符。
答案 3 :(得分:1)
我想你想以某种方式自动调用OnPropertyChanged方法而不指定它所称的特定属性。很难,但你可以尝试另一种方式......
public class SomeClasss
{
public string Name { get; set; }
bool _prop;
public bool MyProp
{
get { return _prop; }
set
{
_prop = value;
//OnPropertyChanged(thismember);
MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
string methodName = method.Name;
string className = method.ReflectedType.Name;
Name = className + "." + methodName;
}
}
}
主要......
class Program
{
static void Main()
{
SomeClasss c = new SomeClasss();
Console.WriteLine("Before: {0}", c.Name);
c.MyProp = true;
Console.WriteLine("After: {0}", c.Name);
Console.ReadKey();
}
}
结果:
之前:
之后:SomeClasss.set_MyProp
使用显示的代码,您可以将属性名称传递给OnPropertyChanged方法,这可能会有所帮助。但是,我不确定您的意图是什么,因此可能无法完全满足您的需求。