Наверное, нубийский вопрос, но я надеялся, что кто-то может помочь мне здесь, так как я полностью потерян. У меня есть задача сделать для работы (я программист-выпускник, и они поставили меня «вызов») - не волнуйтесь, я не прошу прямого ответа, и это не часть моего дня, чтобы дневная работа, просто какая-то дополнительная. Но я думаю, что это связано с интерфейсами, и я полностью потерялся, когда дело доходит до них, поэтому было интересно, может ли кто-нибудь указать мне в правильном направлении.Интерфейс для двух методов, которые принимают разные параметры
В основном я получил ходунки реестра, что петли через реестр и печатает ключи и значение на консольном приложении на основе заданного параметра (см ниже код)
class RegistryList
{
public void RegistryWalker(RegistryKey _key, int _indent)
{
Output.RegistryOutPut(_indent, String.Format("Key: {0}", _key.Name.Split('\\').Last()));
string[] straValues = _key.GetValueNames();
foreach (string strValue in straValues)
{
RegistryValueKind kind = _key.GetValueKind(strValue);
Output.RegistryOutPut(_indent + 1, String.Format("Value: {0}", strValue));
}
string[] straSubKeys = _key.GetSubKeyNames();
foreach (string strSubKey in straSubKeys)
{
try
{
RegistryKey subKey = _key.OpenSubKey(strSubKey);
RegistryWalker(subKey, _indent + 2);
Thread.Sleep(200);
}
catch (System.Security.SecurityException)
{
Console.WriteLine("Denied Access");
}
}
}
я должен был придумать с таким же один для файлов, которые я завершенный (снова см ниже)
class FileList
{
public void FileWalker()
{
StringCollection log = new StringCollection();
string[] drives = Environment.GetLogicalDrives();
foreach (string dr in drives)
{
DriveInfo di = new DriveInfo(dr);
if (!di.IsReady)
{
Console.WriteLine("{0} could not be read", di.Name);
continue;
}
DirectoryInfo rootDir = di.RootDirectory;
Output.FileOutput(rootDir);
Console.WriteLine("Files with restricted access:");
foreach (string s in log)
{
Console.WriteLine(s);
}
Console.WriteLine("Press any key");
Console.ReadKey();
}
}
}
Для записи, Output.RegistryOutput и Output.FileOutput вызовов в фрагментах кода выше отдельного вывод вызова функций (которые работают хорошо, они распечатывают каждый раздел реестра и fil e, но мне нужна одна функция для обоих - см. комментарии ниже).
Заключительная часть задачи состояла в том, чтобы перевести рекурсию в отдельную функцию, которая либо примет экземпляр FileWalker, либо экземпляр RegistryWalker. Кто-то в работе указал мне на Интерфейсы для решения проблемы, но я полностью потерял. Эти две функции будут принимать разные параметры, поэтому я не могу понять, как работает один интерфейс, поскольку, если хост-хост реестра должен использоваться, ему требуются значения RegistryKey и int, но хост File не имеет параметров. Я создал один интерфейс IWalker (опять же, ниже), но я не вижу, как это будет работать для обеих функций.
interface IWalker
{
void Walker();
}
Может ли кто-нибудь пролить свет на это для меня? И даже если это правильный путь, я уже давно теряюсь на этом, и, если возможно, определенно нужно несколько указателей.
Спасибо!