为什么不';t FileSystemInfo声明GetAccessControl方法

本文关键字:声明 GetAccessControl 方法 FileSystemInfo 为什么不 | 更新日期: 2023-09-27 18:25:01

我主要感兴趣的是这背后的设计决策

背景信息:
FileSystemInfo是FileInfo和DirectoryInfo的基类(并且仅是)
这两个类都实现了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);
}

代码中包含了所有(不必要的)类型转换,这一点很不美观,我想知道为什么库是这样设计的。

为什么不';t FileSystemInfo声明GetAccessControl方法

我的猜测是,他们希望两个GetAccessControl方法分别返回正确的具体类型——FileSecurity和DirectorySecurity。如果它们继承自一个通用的GetAccessControl()方法,它们将被迫返回FileSystemSecurity,并且用户将不得不手动强制转换它。

这主要是一种审美选择。