rust入门(4) Trait 特征
//类型 c#中的接口 interface
// 1抽象的方式定义共享的行为
// 2trait bounds 指定泛型是任何拥有特定行为的类型
//定义两个结构体
pub struct Student{
pub name:String,
pub age:u32,
}
pub struct Teacher{
pub name :String,
pub age:u32,
pub subject:String,
}
//定义trait
pub trait GetInfomation{
fn get_name(&self)->&String;
fn get_age(&self)->u32;
}
pub trait GetName{
fn get_name(&self)->&String;
}
pub trait GetAge{
fn get_age(&self)->i32;
}
pub trait SchoolName{
get_school_name(&self)->String
{ String::from("红心学校") }
}
//实现trait
impl GetInfomation for Student{
fn get_name(&self)->&String{
&self.name
}
fn get_age(&self)->u32{
self.age
}
}
impl GetName for Student{
fn get_name(&self)->&String {
&&self.name
}
}
impl GetAge for Student{
fn get_age(&self)->i32 {
self.age
}
}
impl GetInfomation for Teacher{
fn get_name(&self)->&String{
&self.name
}
fn get_age(&self)->u32{
self.age
}
}
//默认实现 学生的是默认实现,老师的在 impl 中重写下
impl SchoolName for Student{}
impl SchoolName for Teacher{
fn get_school_name(&self)->String{
String::from("兰心小学")
}
}
//trait 作为参数
fn pint_infomation(item:&impl GetInfomation)
{
pintln!("name is {},age is {}",item.get_name(),item.get_age());
}
Trait Bound 语法 就是用trait 作为参数的另一种写法 跟之前的泛型有联系了
fn print_infomation_with_trait_bound<T:GetInfomation>(item:&T){
println!("name is {}",item.get_name());
println!("age is {}",item.get_age());
}
fn print_infomation_with_muilty_trait<T>(item:&T)
where T:GetAge+GetName
{
println!("name is {}",item.get_name());
println!("age is {}",item.get_age());
}
//trait 作为返回值
fn produce_item_with_age()->impl GetAge{
Student{name:"小强".to_string(),age:19}
}
fn main() {
let s = Student{name:String::from("张三"),age:1};
let t=Teacher{name:String::from("王老师"),age:18,subject:String::from("数学")};
println!("student name={},age={}",s.get_name(),s.get_age());
println!("teacher name={},age={}",t.get_name(),t.get_age());
let student_school_name = s.get_school_name();
let teacher_school_name = t.get_school_name();
let s=produce_item_with_age();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!