2014-10-21 3 views
0

나는 왜 그것이 일어나고 있는지 혼란스럽게하는 몇 가지 이름 공간 문제가 있습니다.틀린 네임 스페이스를 찾고 계십니까?

아래 코드에서 System.IO & System.Reflection은 위에서 선언 한 System 네임 스페이스 대신 abc.System을 참조하려고 시도하고 있습니다. 왜 그런가요?

using System; 
using System.Collections.Generic; 
using System.Data.OleDb; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace abc.Data 
{ 
public sealed class Access 
{ 
    public static void Open(string dbPath) 
    { 
     // error here referencing abc.System in System.IO, and System.Reflection. 

     string appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);   } 
} 
다음과 같이 그때 별도의 파일에 다른 네임 스페이스를

:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace abc.System 
{ 
    public static class DateTimeExtensions 
    { 
    // Implemented from 
    // http://stackoverflow.com/questions/38039/how-can-i-get-the-datetime-for-the-start-of-the-week 
    public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek) 
    { 
     int diff = dt.DayOfWeek - startOfWeek; 
     if (diff < 0) 
     { 
      diff += 7; 
     } 

     return dt.AddDays(-1 * diff).Date; 
    } 

    public static DateTime EndOfWeek(this DateTime dt, DayOfWeek startOfWeek) 
    { 
     int diff = dt.DayOfWeek - startOfWeek; 
     if (diff < 0) 
     { 
      diff += 7; 
     } 

     return dt.AddDays(diff).Date; 
    } 
} 
} 
+0

"System.IO & System.Reflection이 abc를 참조하려고합니다"라는 것은 무엇을 의미합니까? –

+0

대답 후, 나는 이것이 아마도 http://stackoverflow.com/questions/5681537/namespace-conflict-in-c-sharp의 복제임을 깨달았다. – Tim

답변

4

네임 스페이스 충돌이 거기에 있기 때문에, 당신은 당신이 노력하고 분명히 무엇인지 확인하기 위해 global 키워드를 사용해야합니다 액세스.

string appPath = global::System.IO.Path.GetDirectoryName(global::System.Reflection.Assembly.GetExecutingAssembly().Location); 

또는 가능한 경우 네임 스페이스를 변경하십시오. 그렇게하면 성가신 속도가 빨라질 수 있습니다!

+0

그런데 왜 네임 스페이스가 충돌 하는가? 왜 System은 System 네임 스페이스이고 abc.System은 abc.System 네임 스페이스가 될까요? 왜 시스템을 언급 할까? 로컬 네임 스페이스가 항상 우선하기 때문에 – YouAreSalty

+0

입니다. 그래서'System'을 타이핑하면'abc.Data' (현재 네임 스페이스)를보고 아무 것도 찾지 못하고 한 레벨 위로 올라가서'abc'를 보게됩니다. 왜냐하면 다른 클래스를 보여주기 때문입니다. 네임 스페이스'abc.'에서'System'이라는 네임 스페이스를 사용합니다. 그래서 그것을 사용합니다. 이것은 당신의 의도가 아닙니다. – Tim

+1

FWIW 나는 모든 언어에 미친듯한 키워드를 피한다 (비록 SQL의 문제가 더 많음) – alykins

관련 문제