为什么FileSystemInfo没有声明GetAccessControl方法?

时间:2012-02-19 08:54:27

标签: c# .net windows filesystems acl

我主要对此背后的设计决策感兴趣。

背景资料:
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);
}

代码远非美观,其中包含所有(不必要的)强制转换,我想知道为什么这个库是以这种方式设计的。

1 个答案:

答案 0 :(得分:2)

我的猜测是他们想让两个GetAccessControl方法分别返回正确的具体类型 - FileSecurity和DirectorySecurity。如果它们继承自常见的GetAccessControl()方法,则会强制它们返回FileSystemSecurity,并且用户必须手动强制转换它。

这主要是一种美学选择。