我主要对此背后的设计决策感兴趣。
背景资料:
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);
}
代码远非美观,其中包含所有(不必要的)强制转换,我想知道为什么这个库是以这种方式设计的。
答案 0 :(得分:2)
我的猜测是他们想让两个GetAccessControl方法分别返回正确的具体类型 - FileSecurity和DirectorySecurity。如果它们继承自常见的GetAccessControl()方法,则会强制它们返回FileSystemSecurity,并且用户必须手动强制转换它。
这主要是一种美学选择。