我主要感兴趣的是设计决策背后的。
背景信息:
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);
}代码中的所有(不必要的)强制转换都不是很漂亮,我想知道为什么库是这样设计的。
发布于 2012-02-19 09:23:48
我的猜测是,他们希望两个GetAccessControl方法返回正确的具体类型-- FileSecurity和DirectorySecurity。如果它们继承自一个公共的GetAccessControl()方法,它们将被迫返回FileSystemSecurity,并且用户将不得不手动转换它。
这主要是一种审美选择。
https://stackoverflow.com/questions/9347901
复制相似问题