Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不能将此委托传递给基类构造函数? A类 { 公共A(函数检索函数,函数加载函数) { } } 类实体 { } B类:A { 公共B():基(GetEntity、LoadEntities) { } 私有列表加载实体() { 返回新列表(); } 私有实体GetEntity(int-serverID) { 返回null; } }_C# - Fatal编程技术网

C# 为什么不能将此委托传递给基类构造函数? A类 { 公共A(函数检索函数,函数加载函数) { } } 类实体 { } B类:A { 公共B():基(GetEntity、LoadEntities) { } 私有列表加载实体() { 返回新列表(); } 私有实体GetEntity(int-serverID) { 返回null; } }

C# 为什么不能将此委托传递给基类构造函数? A类 { 公共A(函数检索函数,函数加载函数) { } } 类实体 { } B类:A { 公共B():基(GetEntity、LoadEntities) { } 私有列表加载实体() { 返回新列表(); } 私有实体GetEntity(int-serverID) { 返回null; } },c#,C#,为什么我会犯这个错误 “无法在静态上下文中访问非静态方法“GetEntity” 您试图在构建子类之前将子类成员传递给基类。这是危险的,我很高兴编译器做出了正确的决定并保释了。为什么不在基类中创建虚拟成员并在子类中重写它们,而不是尝试向下传递它们呢?解决这个问题的方法是将这些方法包装在lambda调用中,类似于base(x=>GetEntity(x),()=>LoadEntities())@DavidArno。我喜欢这样!这很酷,但是如果您决定在基本构造函数中运行委托,它仍然提供了危险的可能性。这

为什么我会犯这个错误

“无法在静态上下文中访问非静态方法“GetEntity”


您试图在构建子类之前将子类成员传递给基类。这是危险的,我很高兴编译器做出了正确的决定并保释了。为什么不在基类中创建虚拟成员并在子类中重写它们,而不是尝试向下传递它们呢?解决这个问题的方法是将这些方法包装在lambda调用中,类似于
base(x=>GetEntity(x),()=>LoadEntities())
@DavidArno。我喜欢这样!这很酷,但是如果您决定在基本构造函数中运行委托,它仍然提供了危险的可能性。这是因为对象的子类部分尚未初始化。考虑到风险,我可能仍然会选择虚拟成员,因为他们没有这种隐藏的风险。您试图在构建子类之前将子类成员传递给基类。这是危险的,我很高兴编译器做出了正确的决定并保释了。为什么不在基类中创建虚拟成员并在子类中重写它们,而不是尝试向下传递它们呢?解决这个问题的方法是将这些方法包装在lambda调用中,类似于
base(x=>GetEntity(x),()=>LoadEntities())
@DavidArno。我喜欢这样!这很酷,但是如果您决定在基本构造函数中运行委托,它仍然提供了危险的可能性。这是因为对象的子类部分尚未初始化。考虑到风险,我可能仍然会选择虚拟会员,因为他们没有这种隐藏的风险。
class A<T>
{
    public A(Func<int, T> retriveFunc, Func<List<T>> loadFunc)
    {

    }
}

class Entity
{

}
class B : A<Entity>
{
    public B() : base(GetEntity,LoadEntities)
    {

    }

    private List<Entity> LoadEntities()
    {
        return new List<Entity>();
    }

    private Entity GetEntity(int serverID)
    {
        return null;
    }
}