在 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
方法。