2017-03-01 12 views
0

클래스가 있고 UID를 클래스 속성으로 설정하는 이유는 프로그램 전체에서 여러 메서드에서 사용되므로 값을 전달하지 않아도되기 때문입니다. 내가 얻는 이슈는 context.Response.Write(uid)을 실행하고 페이지를 새로 고칠 때마다 매번 같은 값을 얻는다.C# 클래스 속성이 캐시되고 있습니까?

createRandomString()context.Response.Write(createRandomString())으로 이동하면 새로로드 할 때마다 새 UID가 표시됩니다.

저는 C#을 사용하고 PHP 배경을 사용하는 데있어서 매우 새로운데, 이것은 저에게 다소 이상합니다. 클래스 속성을 설정하면 모든 부하가 바뀔 것이라고 생각합니다. 나는 아마도 프로그램이 컴파일 될 때와 관련이 있다고 생각하고 있는데, UID는 영구적으로 설정되어 여전히 의미가 없습니다. 속성이 설정지고

코드 :

public class Emailer : IHttpHandler { 
    // Define UID 
    static string uid = createRandomString(); 

CreateRandomString 번호 :

public static string createRandomString() { 
    Guid g = Guid.NewGuid(); 
    string GuidString = Convert.ToBase64String(g.ToByteArray()); 
    GuidString = GuidString.Replace("=", ""); 
    GuidString = GuidString.Replace("+", ""); 

    return GuidString; 
} 
+4

당신 UID 속성은 정적 속성이므로 한 번만 다시는 액세스 할 때 새로 고쳐로드. – invalidusername

+0

@invalidusername 그것은 그 시절의 한 해였습니다 ... 페이지가 다시로드 될 때마다 어떻게 재설정되지 않는지 나는 알지 못합니다. 내가 생각한대로 편집 할 때 한 번만 설정됩니까? –

+0

또한 클래스가 처음 멤버로 사용되거나 클래스가 처음 인스턴스화 된 경우 클래스가 처음 참조 될 때 필드 (속성은 아님)가 바로 초기화된다는 것을 의미합니다. 이것은 대개 한 번만 발생합니다. – HimBromBeere

답변

0

필드를 정적으로 유지하면서로드시 값을 설정하여 해결했습니다.

분야 :

// Define UID 
static string uid = ""; 

// Define upload path for files 
static string uploadPath = ""; 

설정 :

// Define UID 
uid = createRandomString(); 
uploadPath = @"c:\" + uid + @"\"; 
+1

회원들이 왜 '정적'이어야한다고 생각하니?당신이 묘사 한 바에 의하면 나는 그 (것)들을해서는 안됩니다. – HimBromBeere

0

정적 필드는 한 번 instansiated 있습니다. 그래서 항상 같은 결과를 얻습니다. initialiser와

public class Emailer : IHttpHandler 
{ 
    // Define UID 
    string uid => createRandomString(); 
} 

https://msdn.microsoft.com/en-us/library/aa645751(v=vs.71).aspx

+0

uid를 사용하여 업로드 경로를 다른 필드로 설정하고 있습니다. 두 가지 모두 정적입니다. 여기서 무엇을 할 수 있습니까? –

+1

적절한 경우를 제외하고는 정적 사용을 중지하십시오. –

0

정적 클래스 레벨 멤버는 처음으로 일단 클래스 (정적 또는 기타)의 일원이가 참조하는 ...이보십시오.

초기화는 클래스가 포함 된 어셈블리가 메모리에서 언로드 될 때만 다시 실행됩니다 (예 : 실행 파일이 언로드 된 경우).

ASP 응용 프로그램의 경우 IIS 프로세스에서 어셈블리를로드하고 언로드하므로 IIS 프로세스를 다시 시작하면 새 UID가 생성됩니다.

+0

어쨌든 강제로 모든 부하를 재설정해야합니까? –

+1

@JoeScotto 정적으로하지 않음 – Nkosi

+0

@JoeScotto 또는 속성/필드가 아닌 메소드로 지정 - public static Guid GetNewOne() {return Guid.NewGuid(); } – SpaceUser7448