Assuming the question is about Windows permissions, not .Net Code Access Security (CAS).
Regardless of which account code was run when the delegate was created (for example, box admin), Windows permissions will be calculated at the time of the actual call, which may differ from the one that was created.
, , ( Windows) :
Func<string,string> readAllFile = fileName => File.ReadAllText(fileName);
ImpersonateAccount("account2", readAllFile);
....
...ImpersonateAccout(string name, Func<string,string> readAllFile)
{
var text1 = readAllFile(@"c:\otherFile.txt");
var text2 = readAllFile(@"c:\myFile.txt");
....
readAllFile, account1, "" , c:\myFile.txt, "account2" .
, "" #, , , , . Windows, .Net(, ).