2011-03-24 2 views
2

ASP.Net 프로젝트에서 클래스를 정적으로 만들면 해당 클래스의 런타임 속성을 웹 서버의 모든 세션에서 사용할 수 있습니다.ASP.Net에 대한 일반 클래스의 정적 클래스

내 질문은 이것입니다. 정적 인 중첩 클래스를 선언했지만 컨테이너가 아니라면 클래스간에 세션 공유가 계속 적용됩니까?

예 :

public class FooContainer 
    { 

     public static class Bar 
     { 
     } 

     public static class dog 
     { 
     } 
    } 
+1

왜 그런가요? 진짜 문제가 뭐야? –

+0

속성과 같은 정적 클래스를 사용하려고했지만 하위 클래스를 normal로 다시 변경하고 해당 속성 접근자를 만들었습니다. – callisto

답변

2

궁극적으로 예.

중첩 된 정적 클래스는 루트 수준의 정적 클래스와 똑같이 컴파일됩니다. (마크는 제네릭이 관련된 곳에서 현명하게 미묘한 차이점을 지적합니다.) 유일한 차이점은 유형의 경로를 한정한다는 점뿐입니다. 모든 환경과 전혀 부작용이 없습니다.

4

예; 정적 중첩 클래스는 다른 정적 클래스와 동일한 동작을합니다. 중첩 클래스가 다르게 동작하는 유일한 경우는 외부 클래스가 제네릭 형식 인 경우입니다. 중첩 된 형식은 부모를 통해 암시 적으로 일반이므로 FooContainer<X>.BarFooContainer<Y>.Bar과 독립적입니다.

주의 : 세션간에 데이터를 공유하는 정적 인 작업은 위험합니다. 편집증처럼 동기화해라. 개인적으로 나는 이것을하기에 아주 좋은 이유가 필요할 것이며 신중한 실행이 필요합니다. 난 단지 캐싱과 같은 것들에 대한 접근 방식을 사용하고 심지어는 미친 듯이 그것에 대해 조심 해요.

1

누군가가 "정적 데이터"와 "ASP.NET"을 같은 문장에서 보게되면 모든 종류의 경고가 사라집니다. 마크는 정적 클래스가 중첩 된 경우에도 정적이 될 것이라고 말했다으로

예, 당신은, 어떤 인스턴스화 클래스는 정적 메서드/속성/생성자를 가질 수

MyStaticClass.StaticField = 3; ///wont work 
MyInstanceClass.MyStaticClass.StaticField = 3; // works 

포함하는 클래스를 통해 그들을 호출 할 필요가 명시 적으로 클래스를 정적으로 만드는 것은 클래스의 목적과 의도를 명확히하는 비 정적 인 실수를 만들 수 없다는 부가적인 이점을 가지고 있습니다.

그러나 ASP.net의 정적 클래스는 응용 프로그램 수준에서 정적이므로주의해야합니다. 따라서 여러 사용자가있는 경우에는 권한에 관계없이 모두 동일한 정적 데이터가 표시되며 해당 데이터가 변경되면 모든 그것을 사용하는 사용자.
정적 변수는 db에서 한 번 읽은 다음 방금 표시된 즉 응용 프로그램의 현재 버전 또는 응용 프로그램의 시작 시간 인 과 같은 것을 넣을 수있는 올바른 위치 일 수 있지만 놓기에는 매우 잘못되었습니다. 사용자 별 데이터 (언어 환경 설정, 사용자 이름 등) ...

+0

분명한 답변을 보내 주셔서 감사합니다. – callisto

관련 문제