C# Can';不能从静态方法更改,但需要使用方法设置非静态属性
我有一个静态的方法,我不能使它成为非静态的,但是我需要使用这个方法设置一个非静态属性,但是我不能,因为它是静态的,建议C# Can';不能从静态方法更改,但需要使用方法设置非静态属性,c#,wpf,C#,Wpf,我有一个静态的方法,我不能使它成为非静态的,但是我需要使用这个方法设置一个非静态属性,但是我不能,因为它是静态的,建议 //Update property with current availability private static void ReportAvailability() { if (NetworkStatus.IsAvailable) { Conn = true;
//Update property with current availability
private static void ReportAvailability()
{
if (NetworkStatus.IsAvailable)
{
Conn = true;
}
else
{
Conn = false;
}
}
private bool _conn;
public bool Conn
{
get { return _conn; }
set
{
if (_conn != value)
_conn = value; RaisePropertyChanged();
}
}
}
将实例传递给静态方法并设置属性
//Update property with current availability
private static void ReportAvailability(SomeType someInstance)
{
if (NetworkStatus.IsAvailable)
{
someInstance.Conn = true;
}
else
{
someInstance.Conn = false;
}
}
在您的情况下,在非静态代码中的某个地方使用:
ReportAvailability(this);
这在你的架构设计中有一个严重的缺陷,我强烈建议你在它变成更糟糕的东西之前修复它。不过,为了回答您的问题,您可以声明一个静态HashMap,所有实例都向其注册,然后让您的ReportAvailability
函数枚举所有当前实例:
public class MyClass : ViewModelBase, IDisposable
{
static HashSet<MyClass> Instances = new HashSet<MyClass>();
public MyClass()
{
Instances.Add(this); // register
}
// dispose object to de-register
public void Dispose()
{
Instances.Remove(this);
}
private static void ReportAvailability()
{
foreach (var instance in Instances)
instance.Conn = NetworkStatus.IsAvailable;
}
private bool _conn;
public bool Conn
{
get { return _conn; }
set
{
if (_conn != value)
_conn = value; RaisePropertyChanged();
}
}
}
公共类MyClass:ViewModelBase,IDisposable
{
静态HashSet实例=新HashSet();
公共MyClass()
{
实例。添加(此);//注册
}
//处置要注销的对象
公共空间处置()
{
实例。移除(此);
}
私有静态可用性()
{
foreach(实例中的var实例)
instance.Conn=NetworkStatus.IsAvailable;
}
私人布尔康涅狄格州;
公共布尔康涅狄格州
{
获取{return\u conn;}
设置
{
如果(_conn!=值)
_conn=值;RaisePropertyChanged();
}
}
}
不过,认真地说,您应该解决根本问题。首先研究一下依赖注入框架,如etc,它是专门为帮助解决此类问题而设计的(例如,通过控制作用域),而不必求助于这种可怕的黑客手段。为什么不能使该方法成为非静态的?您可以拥有一个单例对象吗?将方法体更改为:someInstance.Conn=NetworkStatus.IsAvailable;