我不确定如何表达这个问题,但我有一个问题,关于asp.net和C#如何处理运行的源代码的“实例”或“副本”,以及当它们被不同的用户使用时,它们之间是否会有任何类型的“交叉授粉”。
总结这个问题,在特定时间使用网站的人A是否可以访问B正在做的事情,如果他们同时也在网站上(这是我想要避免和确认的)。
我理解OOP是如何工作的,这个问题是在OOP之上添加一层,以了解代码是如何隔离的,下面将对此进行描述。
例如,假设有10个用户注册了一个具有单独身份验证的系统(由VS创建)。
你有你写的执行各种功能的源代码。
当用户A使用网站并执行各种操作时,他们是否拥有为自己运行的源代码的“副本”?
如果用户B决定同时使用该网站,他们是否也有自己的源码“副本”,或者他们使用的源码与用户A使用的源码相同?
据我所知,每次你有一个类,你用构造函数来实例化它,你就会有一个新的对象,这个对象会被使用,然后在以后不需要的时候销毁。
再往上一步,使用该系统的用户是否有自己的整个孤立源代码的副本?
例如,有些静态类总是只有一个实例。person A和person B共享同一个静态类,还是每个人都有自己的静态类?
例如,我有一个类,它有全局属性,而不是方法属性。
public partial class HelperMethods
{
private static string Item1 = "StaticString1";
private const string Item2 = "constString2";
private const string Item3 = "constString3";
public BlockingCollection<Task> Collection1 = new BlockingCollection<Task>();
public BlockingCollection<Task> Collection2 = new BlockingCollection<Task>();
public BlockingCollection<Task> Collection3 = new BlockingCollection<Task>();
public BlockingCollection<Task> Collection4 = new BlockingCollection<Task>();
public ApplicationUser CurrentUser { get; set; }
public HelperMethods(int id) {
using (var database = new DatabaseEntities()) {
CurrentUser = //database call here with ID.
}
}
}用户A和用户B是否有自己的所有这些项目的单独副本(例如Collection1),或者这些项目是否在彼此之间共享?
如果用户A向Collection1添加项目,同时用户B向Collection1添加项目,他们是将这些项目添加到同一集合中,还是将它们彼此完全分开?
所以,为了简化和总结我试图理解的东西,当用户A和用户B都登录到网站时,他们是否各自获得了" HelperMethods“的副本(为了简单起见,假设HelperMethods是整个程序)并且彼此隔离,还是C#做了其他事情,实际上只有一个HelperMethods副本,每个使用系统的用户都只是获取构造函数方法,并共享全局参数中的所有其他内容?
下面是一个图像示例:
场景1: Person A(拥有类HelperMethods的副本和其中的所有项。)人员B(拥有类HelperMethods的副本和其中的所有项目。)
场景2:(HelperMethods -公开所有全局参数)人员A(仅具有HelperMethod构造函数的副本。)人员B(只有HelperMethod构造函数的副本。)
谢谢
发布于 2019-10-07 13:57:47
HelperMethods类的静态成员将在所有用户之间共享。对于每个请求/用户,它们不会分开。静态成员归ASP.NET工作进程所有,这对所有用户都是通用的。当然,每个用户的实例变量将是分开的。
https://stackoverflow.com/questions/58263926
复制相似问题