c # - Hvorfor er FileSystemInfo ikke GetAccessControl-metoden?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er primært interesseret i design beslutning bag dette.


baggrundsinformation:

FileSystemInfo er base klasse til (og kun til) FileInfo og DirectoryInfo.

Begge klasser implementerer GetAccessControl(), og returnerer henholdsvis et FileSecurity- eller DirectorySecurity-objekt.

FileSecurity og DirectorySecurity begge stammer fra FileSystemSecurity - og igen er de eneste klasser at gøre det.

Hverken FileSecurity eller DirectorySecurity synes at erklære nogen egenskaber eller egenskaber - bortset fra konstruktører. [10] [11] [12] [13] [14] [15]


Alligevel indeholder FileSystemInfo ikke en public FileSystemSecurity GetAccessControl() metode.


Spørgsmål :

Kan nogen kaste lys over hvorfor FileSystemInfo ikke indeholder denne metode?


Eksempelkode


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);
}


Koden er langt fra smuk med alle de (unødvendige) casts i det, og jeg spekulerede på, hvorfor biblioteket blev designet på denne måde.

Bedste reference


Mit gæt er, at de ønskede at få de to GetAccessControl-metoder til at returnere de respektive konkrete typer - henholdsvis FileSecurity og DirectorySecurity. Hvis de ervervet fra en fælles GetAccessControl () -metode, ville de blive tvunget til at returnere FileSystemSecurity, og brugeren skulle kaste den manuelt.


Det er et æstetisk valg, for det meste.