oop - 是否可以从特征中访问结构字段?

标签 oop rust traits

Traits 用于对一些要从结构中实现的函数进行分组,但是是否可以从 trait 中访问结构字段?

我可以想象在 trait 中声明字段,以便字段也被抽象化。我还没有找到这样的语法;还有其他解决办法吗?否则,就不可能有使用特征的非静态方法,对吗?

我了解 C# 的面向对象编程,并且正在研究 Rust,尝试调整我已经从 C# 了解的 OOP 功能。

最佳答案

这听起来像是您误解了特征的工作原理。特征不能有字段。如果您想提供对某个特征的字段的访问,则需要在该特征中定义一个方法(例如,get_blah)。

如果您问是否可以从该结构的特征实现中访问该结构的字段,那么是的。该结构知道它自己的类型,所以没有问题。

trait Pet {
    fn is_smelly(&self) -> bool;
}

struct Dog {
    washed_recently: bool,
}

impl Pet for Dog {
    fn is_smelly(&self) -> bool {
        !self.washed_recently
    }
}

如果您正在编写特征的默认实现(在特征中定义方法体),那么不,您不能访问字段。默认实现只能使用在特征或超特征中定义的方法。

关于oop - 是否可以从特征中访问结构字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28219730/

相关文章:

rust - 无法将实现特征的结构装箱为特征对象

java - 设计数据结构/Java数据结构

class - 类如何帮助您管理大型应用程序?

rust - 两次通过闭包而没有被移走

rust - 无法使用字节顺序更新注册表

string - 如何将 to_string() 功能添加到枚举中?

rust - 如何告诉Rust我的自定义特征已经实现了 `num_traits::pow::Pow`函数

c - 指向函数的指针如何在 C 中发挥作用?

java - 通用 hibernate 对象的面向对象设计

rust - 如何使用 Rust 中的 C typedef 结构和该结构的函数?