스택 오버플로. 변수 중 비 정적 클래스 (UserID (int)와 MyDictionary (Dictionary)) 중 하나를 초기화하려고한다고 가정 해 봅시다. 이 비 정적 클래스는 정적 클래스 내에서 선언되며 정적 클래스 멤버 중 하나에서 초기화됩니다. 스크립트가 오래 실행되고 다른 사용자가 같은 페이지에 액세스하면 새 사용자가 다른 사용자의 MyDictionary의 내용을 변경하게됩니다. 그러나 MyDictionary가 비 정적 클래스에 있기 때문에 이것이 가능한지는 알 수 없습니다. 아무도 이것을 이해합니까? 고맙습니다. 포함하는 클래스 상기 액세스 부재가 정적정적 클래스 스레드 안전성 내에서 ASP.NET 비 정적 클래스
답변
코드가 이처럼 약간 생겼다고 가정합니다. 당신은 기본적으로 말하는 정적 변수 "; 이들 중 하나의 내 응용 프로그램에서 나는 이들 중 하나 싶다"으로 정적 클래스 내부의 객체를 선언함으로써
public class MyNonStaticClass
{
public int UserID;
public Dictionary<int, string> MyDictionary
= new Dictionary<int, string>;
}
public static class MyStaticClass
{
public static MyNonStaticClass aStaticInstanceOfTheNonStaticClass
= new MyNonStaticClass();
public static void AddToDictionary(int key, string value)
{
aStaticInstanceOfTheNonStaticClass.add(key, value);
}
}
; 그래서 클래스가 정적이 아니더라도; 여전히 정적 인스턴스를 만들고 있습니다.
이봐, 나는 약 1 시간 동안 이것을 알아 냈다. 그리고 당신의 대답은 그것을 확인한다. 고맙습니다. – user1325179
때문에 단일 메모리 공간을 이용한다. 정적 클래스의 참조 (이 경우에는 지역, 필드 또는 속성)가 static이 아닌 것으로 가정해야합니다 (정적이 아닌 클래스의 인스턴스화 일지라도).
클래스가 처음부터 정적 인 이유는 무엇입니까? 공유 논리를 사용하는 경우 정적 메서드에 대한 참조로 사전을 전달하지 않으시겠습니까?
정적 다움 (또는 그 부족) 하지 스레드 안전에 영향을 미치지 않습니다. 정적 단순히 반원 (속성 필드, 방법 또는 생성자)를 형 클래스의 특정 인스턴스 와하지와 연관되는 것을 의미한다.
내가 스레드로부터 안전하지 않습니다 정적 코드를 작성할 수 있습니다 그 반대의 경우도 마찬가지 스레드로부터 안전하고, 내가 인스턴스 코드를 작성할 수 있습니다 (귀하의 질문에 설명하는 코드와 같은). 여기에 (나쁜) 일부 않는, 쓰레드는 코드, 더 많거나 적은 내가 당신을 생각의 라인을 따라가하고있는 :
public static class MyFoo {
// Just because this is a static property doesn't
// mean the contained dictionary is thread safe!
public static Dictionary<String, String> MyDictionary { get; set; }
public static MyFoo() {
MyDictionary = new Dictionary<String, String>();
}
}
당신은 ASP.NET에서 사용자 별 정보를 저장해야하는 경우를 사용 세션 객체 또는 (더 긴 수명의 데이터의 경우) 데이터베이스. 정적 변수에 의존하지 마십시오. 두 명의 사용자가 동시에 사이트에 있다면 어떻게해야합니까?
- 1. 스레드 안전성 및 정적 하위 클래스
- 2. 정적 클래스의 비 정적 클래스 값에 액세스
- 3. 다른 클래스 내에서 정적 클래스 포인터 정의
- 4. 정적 클래스에서 비 정적 클래스 트리거?
- 5. ASP.NET : App_Code의 정적 클래스
- 6. ASP.NET 정적 하위 클래스
- 7. 정적 클래스 및 정적 메서드
- 8. 부스트 스레드 및 비 정적 클래스 함수 사용하기
- 9. 스레드 안전성 클래스 및 액세서리
- 10. 정적 클래스 형식의 템플릿 클래스
- 11. SqlServer 클래스 정적 메서드 - 스레드 안전
- 12. 싱글 톤 클래스 : 정적 속성 또는 비 정적 속성?
- 13. Java - 비 정적 클래스의 확장 된 정적 클래스
- 14. 안드로이드의 어댑터는 정적 내부 클래스 또는 비 정적 내부 클래스이어야합니다.
- 15. Java Servlet 정적 클래스
- 16. 정적 클래스 스레드가 안전합니까?
- 17. 다른 스레드에서 비 정적 클래스 함수 호출
- 18. 다중 스레드 응용 프로그램의 정적 클래스/메소드
- 19. ASP.NET 정적 클래스 및 asp.net 세션
- 20. Java 애플릿 정적 클래스
- 21. 정적 클래스 I 클래스 같은이
- 22. 정적 메서드 내에서 클래스 인스턴스 만들기
- 23. 공유 정적 클래스 데이터
- 24. 데이터베이스 액세스를위한 정적 클래스?
- 25. 스레드 안전 클래스 대 모든 정적 메서드가있는 유틸리티 클래스
- 26. 안드로이드 정적 클래스
- 27. , 비 스레드 안전 클래스
- 28. 정적 클래스 내에서 비 정적 변수를 사용해야합니다.이 문제를 해결하는 방법은 무엇입니까?
- 29. 정적 클래스 C# ASP.NET Web Forms에서 정적 메서드 호출
- 30. 정적 메서드 내에서 HttpContext.Current.Response
다른 사용자가 사용하는 서버 측 항목을 수정할 수있는 사용자는 어디에서 얻을 수 있습니까? 실수로 서버를 사용하면 모든 사용자가 별도의 스레드와 메모리를 사용하게됩니다. 또한 개인 클래스가 1 클래스에서만 사용되는 경우를 제외하고 모든 클래스를 개별 파일에 저장하는 것이 좋습니다. – MarioDS