2012-02-19 1 views
1

저는 주로 디자인 결정에 관심이 있습니다.FileSystemInfo가 GetAccessControl 메서드를 선언하지 않는 이유는 무엇입니까?

배경 정보 :
FileSystemInfoFileInfoDirectoryInfo (만까지)에 대한 기본 클래스입니다.
두 클래스 모두 GetAccessControl()을 구현하고 FileSecurity 또는 DirectorySecurity 개체를 각각 반환합니다.
FileSecurityDirectorySecurity은 모두 FileSystemSecurity에서 파생되며 다시 이렇게하는 유일한 클래스입니다.
FileSecurityDirectorySecurity도 생성자를 제외하고는 자신의 메서드 나 속성을 선언하지 않은 것 같습니다.

여전히 FileSystemInfo에는 public FileSystemSecurity GetAccessControl() 메소드가 없습니다.

질문 :
아무도 FileSystemInfo이 방법을 포함하지 않는 이유 위에 되거 수 있습니까?

예제 코드

public static void GrantFullControlToBuiltinUsers(this FileSystemInfo fileSystemInfo) 
{ 
    FileSystemSecurity acFile; 

    if(fileSystemInfo is DirectoryInfo) 
     acFile = ((DirectoryInfo) fileSystemInfo).GetAccessControl(); 
    else 
     acFile = ((FileInfo)fileSystemInfo).GetAccessControl(); 


    acFile.AddAccessRule(
     new FileSystemAccessRule(GetAccountNameBuiltinUsers(), 
            FileSystemRights.FullControl, 
            AccessControlType.Allow)); 


    if (fileSystemInfo is DirectoryInfo) 
     ((DirectoryInfo)fileSystemInfo).SetAccessControl((DirectorySecurity)acFile); 
    else 
     ((FileInfo)fileSystemInfo).SetAccessControl((FileSecurity)acFile); 
} 

코드는 모든 (불필요한)와 함께 멀리 아름다운으로부터 그 안에 캐스트와 라이브러리가 이런 식으로 디자인 된 이유가 궁금.

답변

2

내 생각 엔 두 개의 GetAccessControl 메서드가 적절한 구체적인 유형 인 FileSecurity 및 DirectorySecurity를 ​​반환하도록하려는 것입니다. 공용 GetAccessControl() 메서드에서 상속받은 경우 FileSystemSecurity를 ​​반환해야하므로 사용자가 직접 캐스팅해야합니다.

주로 미적인 선택입니다.

관련 문제