为什么不';t FileSystemInfo声明GetAccessControl方法
本文关键字:声明 GetAccessControl 方法 FileSystemInfo 为什么不 | 更新日期: 2023-09-27 18:25:01
我主要感兴趣的是这背后的设计决策。
背景信息:
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);
}
代码中包含了所有(不必要的)类型转换,这一点很不美观,我想知道为什么库是这样设计的。
我的猜测是,他们希望两个GetAccessControl方法分别返回正确的具体类型——FileSecurity和DirectorySecurity。如果它们继承自一个通用的GetAccessControl()方法,它们将被迫返回FileSystemSecurity,并且用户将不得不手动强制转换它。
这主要是一种审美选择。