正确实现接口的方法

时间:2015-12-02 15:56:13

标签: c# interface

我试图理解Interfaces,我在这个页面看到了一个例子,但它本身并不是一个接口的例子。

我对接口的理解:

  • 是实现(方法,属性,事件等)的类与接口之间的契约。

  • 因为在C#和.NET中,你不能进行多重继承,你可以使用接口,你可以使用那些你不能继承的类的方法,属性等。 / p>

所以这只是演示以及我尝试过的内容: (在不同的班级)

SQL> DROP TABLE TEST_TABLE;

Table dropped.

SQL> CREATE TABLE TEST_TABLE AS SELECT 1 A FROM DUAL;

Table created.

SQL> ALTER TABLE TEST_TABLE ENABLE ROW MOVEMENT;

Table altered.

SQL> --Sleep required here to prevent error on flashback.
SQL> DROP RESTORE POINT TEST_RESTORE_POINT;

Restore point dropped.

SQL> CREATE RESTORE POINT TEST_RESTORE_POINT;

Restore point created.

SQL> FLASHBACK TABLE TEST_TABLE TO RESTORE POINT TEST_RESTORE_POINT;
FLASHBACK TABLE TEST_TABLE TO RESTORE POINT TEST_RESTORE_POINT
                *
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed

我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

  

我做错了什么?

您未在Hello的继承链中的任何位置实施Son。如果更改了以下任何一项,您将正确实现该接口:

  • Son继承自Mother而非Father
  • Father继承自Mother
  • Father实施Hello
  • Son实施Hello

接口可以用于多个继承。继承仅对实现有效 - 您可以实现多个接口,但不能继承多个实现。

如果您想要重复使用多个类,那么 composition 通常是最好的方法。 Son类将引用FatherMother对象,并通过属性公开它们或创建传递属性和方法以获取底层实现。

答案 1 :(得分:-1)

我们使用接口来处理抽象而不是具体实现,为什么?简单的答案它使测试很容易用假的替换我们的类,并创建模块化应用程序(OOP)

要修复代码,您必须更改此行以转到接口变量而不是类:

 IMother son1 = new Son();
 son1.Hello() // --> Now exists.

在Son class

中实现接口方法之前,您的代码无法正常工作
class Son : Father, IMother
    {
        public string Hello()
        {
            throw new NotImplementedException();
        }
    }

如果你不想在Son中实现接口方法,并且想要在Mother Class中访问该方法,那么你必须在Son类中继承Mother而不是Father类。