错误、漏洞、问题 - 页 2563

 
Andrey Barinov:

?

在这个例子中,它有一个静态修改器,如果你删除它,编译器会给出一个警告,因为它应该

静态可以通过上下文解析操作符从 你的代码的任何部分 访问... 任何代码片断中都可以看到! (我不记得范围了,最近没有检查过,但很可能是全局的,就像在代码的最顶端描述的那样,也就是说,静态方法/字段在哪里被声明并不重要)

 
Igor Makanu:

使用上下文解析语句,可以从 代码的任何部分 访问一个statik... 代码的任何 部分! (我不记得范围了,最近没有检查过,但很可能是全局的,就像在代码的最顶端描述的那样,也就是说,静态方法/域在哪里声明并不重要)

多久以前变得如此:)?

所有相同的规则都适用于静态(私有、保护、公共),它们只是不需要创建对象

这是一个明显的错误。

 
Andrey Barinov:

这样的情况有多久了 :)?

我不知道,我可以确定的是,几个月前,@Ilyas admin 正在解释static的初始化程序,他提到在MQL-程序启动时,static方法和static字段与全局变量一起被初始化......请进一步搜索他的帖子

安德烈-巴里诺夫

所有相同的规则都适用于静态(私有、保护、公共),它们只是不需要创建对象

这是一个明显的错误。

我不准备争论,也不想争论,但帮助文本指出了静态方法的行为

MQL代码正在向C#程序的行为迈进,那里的情况也是类似的,如果程序员决定使用上下文解析操作符,这意味着他有意识地拒绝了编译器的帮助来识别类中违反数据完整性的行为,有一些经典的方法可以在没有上下文解析操作符的情况下获得方法和域。


UPD: 我决定一点一点地重写我的MQL库,我惊恐地注意到,我写的是我在流行的MQL代码中看到的方法和字段的名称与保留字的名称重合....imho,这也是在 "破坏 "依赖关系时避免编译器帮助的一个步骤....。马马虎虎 ))))

 

Igor Makanu:

如果程序员决定使用上下文解析操作符,这意味着他/她有意识地拒绝编译器的帮助来检测类中的数据完整性违规行为,有一些经典的方法和字段的获取不需要上下文解析操作符。

我认为你吸食了太多的OOP。 让它休息一下,然后带着清醒的头脑回来。 上下文解析语句定义了可见性,但对访问没有影响。

 
TheXpert:

我想你已经吃了太多的OOP,休息一下,然后用新的头脑。"上下文解析语句定义了可见性,但对访问没有影响。

好吧,由我来决定抽什么烟,什么时候休息 ))))

SZY:任何语言在访问内存内容时都有很多技巧。 我在评论中读到了那里的爱好,经常有关于Python和C++的争吵,再一次--有更人性化的方法来处理字段和方法,如果你决定它更快,那么你不应该指责你得到的东西--在所有的编译器中,你总是可以在你不应该的地方闯入)))。

 
Igor Makanu:

我不知道,我可以肯定地说,几个月前,@Ilyas admin 正在解释静态初始化程序,并提到静态方法和静态字段在MQL-程序启动时与全局变量一起被初始化......请进一步搜索他的帖子

我不准备争论,也不想争论,但帮助文本代表了静态方法的行为

"私有"--只允许从一个类的方法中访问该类的变量和方法。"

"只有 "这个词在哪里不清楚?

根据这个例子,OnStart不是A类的一个方法。

 
Aliaksandr Hryshyn:

"私有"--只允许从一个类的方法中访问该类的变量和方法。"

"只有 "这个词在哪里不清楚?

根据这个例子,OnStart不是A类的一个方法。

我们不是在谈论修饰语private,而是修饰语static--进行测试,看看静态在MQL中的表现如何。

 
Igor Makanu:

我不知道,我可以肯定地说,几个月前,@Ilyas admin 正在解释静态初始化程序,并提到静态方法和静态字段在MQL-程序启动时与全局变量一起被初始化......请进一步搜索他的帖子

我不准备争论,但帮助文本指出了静态方法的行为

而且,我认为没有必要用论据来确认--MQL正朝着C#程序的行为方向发展,它有类似的情况,以及如果程序员决定使用上下文解析操作符,这意味着他有意识地拒绝了编译器的帮助,以识别类中违反数据完整性的行为,有经典的方法和字段可以在没有上下文解析操作符时获得


UPD: 我决定一点一点地重写我的MQL库,我惊恐地注意到,我写的是我在流行的MQL代码中看到的方法和字段的名称与保留字的名称重合....imho,这也是在 "破坏 "依赖关系时避免编译器帮助的一个步骤....。马马虎虎 ))))

https://pikabu.ru/story/nevozmozhno_tak_nevozmozhno_2129852
 

?

这是一个奇怪的情况,班级以外的所有东西都与staichiqs一起工作了很长时间。而我只是在大惊小怪....。只是为了好玩,你可以自己复制代码。

int print(int value)
{  Print(value,":",__FUNCTION__); 
 return(value);
}
class A
{
private:
   static int        a1;
protected:
   static int        a2;
public:
   static int        a3;

};
//+------------------------------------------------------------------+
static int A::a1 = print(1);
static int A::a2 = print(2);
static int A::a3 = print(3);

//+------------------------------------------------------------------+
void OnStart()
{}
//+------------------------------------------------------------------+

你看到一个对象实例吗?而且它存在于MQL中;)

SZZ:而且它存在于帮助的层面......你对我有什么不满?

https://www.mql5.com/ru/docs/basis/oop/staticmembers

不能静态地声明类成员将导致需要在全局程序层面声明这些数据。 这将切断数据和它的类之间的关系,也不符合基本的OOP范式,即在一个类中结合数据和方法来处理它。静态成员允许非特定于个别实例的类数据存在于类的范围内。