为什么我必须强制转换为界面?

茉莉花

昨天,当使用某些Entity Framework东西时,我尝试编写它,并收到错误“ ObjectContext不是成员”等。

context.ObjectContext.Refresh(RefreshMode.StoreWins, myObject);

现在,上下文继承了此处记录的DbContext对象:http : //msdn.microsoft.com/zh-cn/library/system.data.entity.dbcontext( v=vs.103) .aspx

这是“ is a”类型的正常继承-我的上下文对象是DbContext对象。DbContext类实现了IObjectContextAdapter接口,因此我希望上面的代码可以工作-接口声明的成员函数必须在DbContext类中实现,否则,我希望它在编译时失败,并带有“您必须实现接口”错误。但是,当我们查看生成的类定义时,它不存在!

最终,我实现了这样的调用,编译器接受了该调用。

((IObjectContextAdapter)context).ObjectContext.Refresh(RefreshMode.StoreWins, myObject);

当以下代码相同且可以正常工作时,谁能解释为什么我必须这样做?

interface IMyInterface {
    int MyInterfaceMemberFunction();
}

public class MyObjectClass : IMyInterface {
    public int MyInterfaceMemberFunction() { return 17; }
}

public class MyTestClass {
    public int MyTestFunction() {
        MyObjectClass m = new MyObjectClass();
        return m.MyInterfaceMemberFunction(); //error here for EF context
    }
}
S队

这是因为该ObjectContext属性是显式实现的要使用您的示例进行演示:

interface IMyInterface {
    int MyInterfaceMemberFunction();
}

public class MyObjectClass : IMyInterface {
    // this line changed:
    int IMyInterface.MyInterfaceMemberFunction() { return 17; }
}

public class MyTestClass {
    public int MyTestFunction() {
        MyObjectClass m = new MyObjectClass();
        //return m.MyInterfaceMemberFunction(); //error here
        return ((IMyInterface)m).MyInterfaceMemberFunction(); //this works
    }
}

如果您有两个接口用相同的名称定义不同的成员,则必须明确实现。如果您希望正常使用类的人不会注意到它们,它也可以用于隐藏某些接口成员。例如,List<T>器具IList,但明确工具IList.Add(object),让你不小心尝试什么,但添加TList<T>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我必须强制转换为类型参数,而不能使用受约束的类型?

来自分类Dev

为什么必须将参数强制转换为const?

来自分类Dev

为什么我必须强制转换Excel.Cells但不强制转换Excel.End?

来自分类Dev

为什么必须强制转换为void **(例如在cudaMalloc调用中)?

来自分类Dev

为什么必须在此宏中将NULL强制转换为类型?

来自分类Dev

为什么必须强制转换为派生类而不是隐式

来自分类Dev

为什么初始化指针时必须将数组强制转换为type []?

来自分类Dev

为什么必须在此代码中强制转换为 struct in_addr ?

来自分类Dev

为什么我必须将一个字节强制转换为无符号两次才能看到十六进制输出?

来自分类Dev

为什么我的tableadaptor强制在日期列上强制转换为字符串

来自分类Dev

为什么我必须对值元组中的对象执行强制转换?

来自分类Dev

为什么我必须在mysql子查询中将bit(1)转换为unsigned?

来自分类Dev

为什么我必须将“ uint8”转换为“ float32”

来自分类Dev

为什么我必须转换为 ulong 才能从寄存器读取数据?

来自分类Dev

在C语言中,为什么我们需要将char *强制转换为void?

来自分类Dev

为什么显式运算符bool让我强制转换为ANY基本类型?

来自分类常见问题

为什么强制转换为int给我8而不是0?

来自分类Dev

ImmutableList与List-我应该将其强制转换为什么?

来自分类Dev

为什么我没有收到将指针强制转换为int的警告?

来自分类Dev

C数组数组:为什么我需要在此处强制转换为const?

来自分类Dev

为什么将a从数组强制转换为指针会破坏我的数据?

来自分类Dev

为什么Haskell会在将文字强制转换为我的类型时挂起?

来自分类Dev

$在SwiftUI中如何工作,为什么我可以将@StateObject强制转换为@ObservedObject

来自分类Dev

为什么我不能将对象强制转换为正在实现的接口?

来自分类Dev

为什么在强制转换为字节之前需要强制转换为Float?

来自分类Dev

ggplot:为什么必须将数据转换为长格式?

来自分类Dev

为什么Clang将结构参数强制转换为int

来自分类Dev

为什么长时间在Java中强制转换为double?

来自分类Dev

为什么需要强制转换为布尔?

Related 相关文章

  1. 1

    为什么我必须强制转换为类型参数,而不能使用受约束的类型?

  2. 2

    为什么必须将参数强制转换为const?

  3. 3

    为什么我必须强制转换Excel.Cells但不强制转换Excel.End?

  4. 4

    为什么必须强制转换为void **(例如在cudaMalloc调用中)?

  5. 5

    为什么必须在此宏中将NULL强制转换为类型?

  6. 6

    为什么必须强制转换为派生类而不是隐式

  7. 7

    为什么初始化指针时必须将数组强制转换为type []?

  8. 8

    为什么必须在此代码中强制转换为 struct in_addr ?

  9. 9

    为什么我必须将一个字节强制转换为无符号两次才能看到十六进制输出?

  10. 10

    为什么我的tableadaptor强制在日期列上强制转换为字符串

  11. 11

    为什么我必须对值元组中的对象执行强制转换?

  12. 12

    为什么我必须在mysql子查询中将bit(1)转换为unsigned?

  13. 13

    为什么我必须将“ uint8”转换为“ float32”

  14. 14

    为什么我必须转换为 ulong 才能从寄存器读取数据?

  15. 15

    在C语言中,为什么我们需要将char *强制转换为void?

  16. 16

    为什么显式运算符bool让我强制转换为ANY基本类型?

  17. 17

    为什么强制转换为int给我8而不是0?

  18. 18

    ImmutableList与List-我应该将其强制转换为什么?

  19. 19

    为什么我没有收到将指针强制转换为int的警告?

  20. 20

    C数组数组:为什么我需要在此处强制转换为const?

  21. 21

    为什么将a从数组强制转换为指针会破坏我的数据?

  22. 22

    为什么Haskell会在将文字强制转换为我的类型时挂起?

  23. 23

    $在SwiftUI中如何工作,为什么我可以将@StateObject强制转换为@ObservedObject

  24. 24

    为什么我不能将对象强制转换为正在实现的接口?

  25. 25

    为什么在强制转换为字节之前需要强制转换为Float?

  26. 26

    ggplot:为什么必须将数据转换为长格式?

  27. 27

    为什么Clang将结构参数强制转换为int

  28. 28

    为什么长时间在Java中强制转换为double?

  29. 29

    为什么需要强制转换为布尔?

热门标签

归档