gpt4 book ai didi

dart - 为什么我可以使用反射来调用外部类的私有(private)方法?

转载 作者:行者123 更新时间:2023-12-03 02:53:47 25 4
gpt4 key购买 nike

我可以使用反射来访问和调用库外部类的私有(private)方法。这是错误还是期望的行为?如果需要,如何使外部代码无法访问私有(private)成员/方法?

library left;

class Thing {
void _priv(String s) {
print(s);
}
}

library right;

void main() {
var t = new Thing();
var mirror = reflect(t);

mirror.type.declarations.values
.where( (d) => d.isPrivate && d is MethodMirror )
.forEach( (d) {
print(d.simpleName == #_priv); // prints false
mirror.getField(d.simpleName).reflectee("Hello World"); // prints Hello World
});
}

最佳答案

此隐私不是一项安全功能,仅用于向您的 API 用户传达此类方法仅供内部使用。无法阻止使用镜像访问。

在镜像中禁止它不会阻止访问,因为 VM 和 dart2js 只是破坏或前缀私有(private)方法名称以防止名称与公共(public)方法冲突。可以使用蛮力预测或找到这些名称,然后调用它们。

关于dart - 为什么我可以使用反射来调用外部类的私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28598757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com