我主要对这背后的devise决定感兴趣。
背景资料:
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); }
这些代码与所有(不必要的)代码都非常漂亮,我想知道为什么图书馆是这样devise的。
我的猜测是,他们希望两个GetAccessControl方法分别返回适当的具体类型 – FileSecurity和DirectorySecurity。 如果他们从一个通用的GetAccessControl()方法继承,他们将被迫返回FileSystemSecurity,用户将不得不手动强制转换。
这主要是一个美学选择。