2012-02-19 80 views
1

我主要對設計決定感興趣。爲什麼FileSystemInfo不聲明GetAccessControl方法?

背景信息:
FileSystemInfo是基類(並且僅向)FileInfoDirectoryInfo
這兩個類都執行GetAccessControl(),分別返回FileSecurityDirectorySecurity對象。
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,並且用戶必須手動進行強制轉換。

這是一個美學選擇,主要是。

相關問題