在 Rust 中,介面(interface)是透過 trait 來定義的。trait 是一種抽象型別,它定義了一組方法的簽名,但不提供方法的實作。Rust 中的型別可以實作 trait,從而表明它們具有 trait 所定義的方法。當一個型別實作了 trait,它就可以被視為實作了該 trait 的介面。
以下是一個簡單的 Rust trait 範例:
trait Printable {
fn print(&self);
}
struct Person {
name: String,
}
impl Printable for Person {
fn print(&self) {
println!("Name: {}", self.name);
}
}
在上面的程式碼中,我們定義了一個名為 Printable 的 trait,它有一個名為 print
的方法。然後我們定義了一個名為 Person 的結構體,並為其實作了 Printable trait。這意味著 Person 型別現在可以被視為實作了 Printable trait 的介面,並且可以呼叫 print
方法。
其他語言中的介面實作方式如下:
- Go 語言的介面:Go 語言的介面使用 interface 關鍵字來定義。介面定義了一組方法的簽名,但不提供方法的實作。Go 中的型別可以實作介面,並且只要實作了介面的所有方法,就被視為實作了該介面。以下是一個簡單的 Go 介面範例:
type Printable interface {
Print()
}
type Person struct {
Name string
}
func (p Person) Print() {
fmt.Printf("Name: %s\n", p.Name)
}
在上面的程式碼中,我們定義了一個名為 Printable 的介面,它有一個名為 Print
的方法。然後我們定義了一個名為 Person 的結構體,並為其實作了 Printable 介面。這意味著 Person 型別現在可以被視為實作了 Printable 介面,並且可以呼叫 Print
方法。
- C 語言的介面:C 語言並不支援介面的概念。但是,透過函式指標和結構體,可以實作類似於介面的功能。以下是一個簡單的 C 介面範例:
typedef struct {
void (*print)(void* self);
} Printable;
typedef struct {
char* name;
} Person;
void person_print(void* self) {
Person* p = (Person*)self;
printf("Name: %s\n", p->name);
}
在上面的程式碼中,我們定義了一個名為 Printable 的結構體,它包含一個名為 print
的函式指標。然後我們定義了一個名為 Person 的結構體,並為其實作了 Printable 介面。這意味著 Person 型別現在可以被視為實作了 Printable 介面,並且可以呼叫 print
方法。
- C++ 語言的介面:C++ 語言中的介面通過抽象類來實作。抽象類是一種包含至少一個純虛函式的類,純虛函式是沒有實作的虛函式。C++ 中的型別可以實作抽象類,並且只要實作了抽象類的所有純虛函式,就被視為實作了該抽象類的介面。以下是一個簡單的 C++ 介面範例:
class Printable {
public:
virtual void print() = 0;
};
class Person : public Printable {
public:
Person(std::string name) : name(name) {}
virtual void print() {
std::cout << "Name: " << name << std::endl;
}
private:
std::string name;
};
在上面的程式碼中,我們定義了一個名為 Printable 的抽象類,它有一個純虛函式 print
。然後我們定義了一個名為 Person 的類,並為其實作了 Printable 抽象類。這意味著 Person 型別現在可以被視為實作了 Printable 介面,並且可以呼叫 print
方法。
- Java 語言的介面:Java 語言的介面通過 interface 關鍵字來定義。介面定義了一組方法的簽名,但不提供方法的實作。Java 中的型別可以實作介面,並且只要實作了介面的所有方法,就被視為實作了該介面。以下是一個簡單的 Java 介面範例:
interface Printable {
void print();
}
class Person implements Printable {
private String name;
public Person(String name) {
this.name = name;
}
public void print() {
System.out.println("Name: " + name);
}
}
在上面的程式碼中,我們定義了一個名為 Printable 的介面,它有一個名為 print
的方法。然後我們定義了一個名為 Person 的類,並為其實作了 Printable 介面。這意味著 Person 型別現在可以被視為實作了 Printable 介面,並且可以呼叫 print
方法。