不能在此处访问protected构造函数 'ObservableObject()'
时间: 2024-10-15 12:19:41 浏览: 9
在C#中,`protected`构造函数仅允许派生类在其内部直接创建实例。当你尝试从非派生类、静态上下文或外部类直接创建`protected`构造函数的实例时,你会遇到此类错误,因为它们不具备足够的访问权限。
例如:
```csharp
public class BaseClass
{
protected ObservableObject() // 这是一个受保护的构造函数
{
// ...
}
}
// 下面的代码会抛出错误,因为`DirectAccess`不是`BaseClass`的派生类
public class DirectAccess
{
public void DoSomething()
{
// 不能在这里直接创建`ObservableObject`实例
var obj = new ObservableObject(); // CS0122: 类 'DirectAccess' 不能访问受保护的构造函数 'BaseClass.ObservableObject()'
}
}
```
解决这个问题的方法是在派生类中调用这个受保护的构造函数,如果需要在`DirectAccess`这样的类中使用`ObservableObject`,你需要先创建一个派生类并提供适当的行为:
```csharp
public class DerivedClass : BaseClass
{
public DerivedClass()
{
// 或者在这里做其他必要的初始化
base.NewProtectedConstructor();
}
private void NewProtectedConstructor()
{
var obj = new ObservableObject();
// ...
}
}
```
阅读全文