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

标签 oop rust traits

特质用于对要从结构体实现的某些功能进行分组,但是是否可以从特征中访问结构体字段?

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

我知道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
    }
}

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

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

相关文章:

rust - 以 &Box<T> 和 &T 作为参数的因式分解方法

c++ - 重载成员函数的函数特征

c# - 我怎样才能更好地设计这个? (避免使用面向对象设计的 switch 语句)

android - Activity 与 Fragment 交互

java - 关于对单个字符串使用域对象的意见

c# - 为什么将设计模式分为三部分?

rust - 返回通用函数指针的函数

rust - 将 PyAny 转换为给定类型的 PyRef,而无需额外的提取成本?

rust - 当T包装借入的数据时,如何实现Borrow <T>?

rust - 防止值在通用匹配中掉落