2012-02-19 5 views
1

Меня интересует в основном дизайнерское решение.Почему FileSystemInfo объявляет метод GetAccessControl?

справочная информация:
FileSystemInfo является базовым классом (и только) FileInfo и DirectoryInfo.
Оба класса реализуют GetAccessControl(), возвращая FileSecurity или DirectorySecurity объект соответственно.
FileSecurity и DirectorySecurity оба происходят от FileSystemSecurity - и снова являются единственными классами для этого.
Ни FileSecurity, ни DirectorySecurity, похоже, не объявляют какие-либо методы или свойства - кроме конструкторов.

Тем не менее, 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, и пользователю придется вручную его вручную.

Это, в основном, эстетический выбор.

Смежные вопросы