Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 静态类与私有实例-优点/缺点-阅读了解更多信息_Security_Static_Singleton_Instance_Private - Fatal编程技术网

Security 静态类与私有实例-优点/缺点-阅读了解更多信息

Security 静态类与私有实例-优点/缺点-阅读了解更多信息,security,static,singleton,instance,private,Security,Static,Singleton,Instance,Private,我正试图找出设计游戏结构的最佳方法 目前我在任何地方都存储类实例,但我更喜欢使用直接的静态访问 例如,我有一个名为“GameSaveSystem.cs”的类 这个类负责为所有当前玩家获取一个StorageDevice和所有与存储相关的信息 因此,我目前的策略如下 ----------------MainClass.cs public static void Main(string[] args) { new Main(); } ----------------Main.cs pub

我正试图找出设计游戏结构的最佳方法

目前我在任何地方都存储类实例,但我更喜欢使用直接的静态访问

例如,我有一个名为“GameSaveSystem.cs”的类

这个类负责为所有当前玩家获取一个StorageDevice和所有与存储相关的信息

因此,我目前的策略如下

----------------MainClass.cs

public static void Main(string[] args) {
      new Main();
}
----------------Main.cs

public Main() {
    GameSaveSystem save_system = new GameSaveSystem();
    singlePlayer = new SinglePlayer(save_system);
    multiPlayer = new MultiPlayer(save_system);
}
----------------SinglePlayer.cs

SinglePlayer(GameSaveSystem save_system) {
  this.save_system = save_system;
}
----------------多人游戏

MultiPlayer(GameSaveSystem save_system) {
  this.save_system = save_system;
}
我这样做的原因是,在Java中,我可以创建一个新的.Java文件,并让它调用“MainClass.main(args);

因此,在这个额外的类中,我可以访问存储在整个类文件中的任何静态类成员或公共静态实例

所以我想知道的是,使用实例会更安全吗?或者对于这种情况,我应该只使用静态类吗?我希望游戏能够针对这类问题提供某种安全性

下面是我见过的3种获取类访问权限的方法

静态访问-用户可以随时随地访问该类(这是我的首选策略,以便于使用)。

   ClassB.DoSomething();
public class A(ClassB classB) {
      this.classB = classB;
}

classB.DoSomething();
  public class A(Main main) {
       this.main = main;
  }
  main.getInstanceB().DoSomething();
实例存储在任何地方-每个类都将存储一个类的已创建实例,以便它们可以随时访问它。类存储了它们需要的所有实例,而没有其他任何内容。

   ClassB.DoSomething();
public class A(ClassB classB) {
      this.classB = classB;
}

classB.DoSomething();
  public class A(Main main) {
       this.main = main;
  }
  main.getInstanceB().DoSomething();
存储在一个类中的实例-1类创建所有类的单个实例,这些类通常只创建一个实例。然后创建该类的实例,并将其存储到需要访问先前创建的实例的所有类中。只有存储主实例的类才能访问其他实例。

   ClassB.DoSomething();
public class A(ClassB classB) {
      this.classB = classB;
}

classB.DoSomething();
  public class A(Main main) {
       this.main = main;
  }
  main.getInstanceB().DoSomething();

在我看来,读一点书你会受益匪浅

从本质上说,你选择哪一个更像是个人的选择。当然,每种方法都有性能方面的考虑,但语义也很重要。作为软件工程师,您可以决定什么是最好的