Почему FileSystemInfo не объявляет метод GetAccessControl? - PullRequest
1 голос
/ 19 февраля 2012

Меня в основном интересует проектное решение , стоящее за этим.

справочная информация:
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);
}

Код далеко не красив со всеми (ненужными) приведениями в нем, и я удивился, почему библиотека была разработана таким образом.

1 Ответ

2 голосов
/ 19 февраля 2012

Я предполагаю, что они хотели, чтобы два метода GetAccessControl возвращали надлежащие конкретные типы - FileSecurity и DirectorySecurity, соответственно. Если они унаследованы от обычного метода GetAccessControl (), они будут вынуждены вернуть FileSystemSecurity, и пользователь должен будет привести его вручную.

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

...