GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing dlang.org — Interfaces - D Programming Language Language Reference
Report a bug
If you spot a problem with this page, click here to create a GitHub issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
a local clone.
Interfaces Contents
Interface DeclarationsAn interface describes a list of functions that a class inheriting from the interface must implement. InterfaceDeclaration:
interface Identifier ;
interface Identifier BaseInterfaceListopt AggregateBody
InterfaceTemplateDeclaration
BaseInterfaceList:
: Interfaces
Implementation Defined: Specialized interfaces may be supported:
A class that inherits from an interface can be implicitly converted to that interface type. Interfaces cannot derive from classes; only from other interfaces. An interface instance implicitly converts to any inherited interfaces. A class cannot derive from an interface multiple times. interface I { void foo(); } class A : I, I // error, duplicate interface { } An instance of an interface cannot be created directly: interface I { void foo(); } ... I iface = new I(); // error, cannot create instance of interface An interface instance can be cast to Object, or dynamically cast to another class type. Interface Method BodiesVirtual interface member functions do not have implementations. Interfaces can implement static or final functions. interface I { void bar() { } // error, implementation not allowed static void foo() { } // ok final void abc() { } // ok } Interfaces can have function templates in the members. All instantiated functions are implicitly final. interface I { void foo(T)() { } // ok, it's implicitly final } Classes that inherit from an interface may not override final or static interface member functions. interface I { void bar(); static void foo() { } final void abc() { } } class C : I { void bar() { } // ok void foo() { } // error, cannot override static I.foo() void abc() { } // error, cannot override final I.abc() } Implementing InterfacesAll virtual interface functions must be defined in a class that inherits from that interface: interface I { void foo(); } class A : I { void foo() { } // ok, provides implementation } class B : I { int foo() { } // error, no `void foo()` implementation } Interfaces can be inherited from a base class, and interface functions overridden: interface I { int foo(); } class A : I { int foo() { return 1; } } class B : A { override int foo() { return 2; } } B b = new B(); assert(b.foo() == 2); I i = b; // ok since B inherits A's I implementation assert(i.foo() == 2); Reimplementing InterfacesInterfaces can be reimplemented in derived classes: interface I { int foo(); } class A : I { int foo() { return 1; } } class B : A, I // reimplement I { override int foo() { return 2; } } B b = new B(); assert(b.foo() == 2); I i = b; assert(i.foo() == 2); A a = b; I i2 = a; assert(i2.foo() == 2); // i2 has A's virtual pointer for foo which points to B.foo A reimplemented interface must implement all the interface functions, it does not inherit them from a super class: interface I { int foo(); } class A : I { int foo() { return 1; } } class B : A, I { } // error, no foo() for interface I Interface Method ContractsInterface member functions can have contracts even though there is no body for the function. The contracts are inherited by any class member function that implements that interface member function. interface I { int foo(int i) in { assert(i > 7); } out (result) { assert(result & 1); } void bar(); } Const and Immutable InterfacesIf an interface has const or immutable storage class, then all members of the interface are const or immutable. This storage class is not inherited. COM InterfacesA variant on interfaces is the COM interface. A COM interface is designed to map directly onto a Windows COM object. Any COM object can be represented by a COM interface, and any D object with a COM interface can be used by external COM clients. A COM interface is defined as one that derives from the interface core.sys.windows.com.IUnknown. A COM interface differs from a regular D interface in that:
See also Modern COM Programming in D C++ InterfacesC++ interfaces are interfaces declared with C++ linkage: extern (C++) interface Ifoo { void foo(); void bar(); }which is meant to correspond with the following C++ declaration: class Ifoo
{
virtual void foo();
virtual void bar();
};
Any interface that derives from a C++ interface is also a C++ interface. A C++ interface differs from a D interface in that:
Copyright © 1999-2026 by the D Language Foundation | Page generated by
Ddoc on Mon Nov 9 05:59:19 2026
|
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |