【发布时间】:2016-02-29 16:28:29
【问题描述】:
我有一个基类O,和两个派生类:A : O 和B : O,如下所示:
public abstract class O
{
public O(string val)
{
this.Value = val;
}
private string value;
public string Value
{
get { return this.value; }
set
{
this.value = value;
RaiseValueChanged();
}
}
protected delegate void ValueChangedEventHandler();
protected event ValueChangedEventHandler ValueChanged;
protected void RaiseValueChanged()
{ if (ValueChanged != null) ValueChanged(); }
}
public sealed class A : O
{
public A(string val)
: base(val) { }
}
public sealed class B : O
{
public B(string val, A instance)
: base(val)
{
instanceA = instance;
}
private A instanceA;
public A InstanceA
{
get { return instanceA; }
set
{
instanceA = value;
}
}
public void MyMethod()
{
//Some stuff..
}
}
当B.instanceA.ValueChanged 被提出时,我想调用B.MyMethod();,但当我发现我不能这样做时,我很惊讶:
public sealed class B : O
{
public B(string val, A instance)
: base(val)
{
instanceA = instance;
//instanceA.ValueChanged += MyMethod;
}
private A instanceA;
public A InstanceA
{
get { return instanceA; }
set
{
//instanceA.ValueChanged -= MyMethod;
instanceA = value;
//instanceA.ValueChanged += MyMethod;
}
}
public void MyMethod()
{
//Some stuff..
}
}
根据MSDN:
protected 关键字是成员访问修饰符。受保护的成员 可在其类内和派生类实例中访问。
但是虽然A 和B 都是O 的派生类,但它们不能使用彼此的基本保护成员。
在我的情况下,有什么建议可以解决这个问题吗? (而不是举办活动public)
【问题讨论】:
-
您为什么不想公开此活动?您是否只希望特定类型能够注册?
-
B不继承自A这就是您无法访问此事件的原因。它们共享相同的基础但不继承。 -
@YuvalItzchakov 是的,我只想注册
O派生类。
标签: c# oop event-handling protected access-modifiers