La raison pour laquelle je pose cette question est parce que je veux créer une classe qui a toutes les fonctionnalités de la classe FileInfo (dérive de FileInfo), et me permet d'y ajouter mes propres propriétés.Existe-t-il une alternative à l'héritage des classes scellées?
Je pense qu'un exemple collaborera plus. Ce que je veux:
BindingList<FileInformation> files = new BindingList<FileInformation>();
public void GatherFileInfo(string path)
{
files.Add(new FileInformation(path));
listboxFiles.DataContext = files;
}
class FileInformation : FileInfo
{
public bool selected = false;
}
Versus ce que je crains que je dois faire:
BindingList<FileInformation> files = new BindingList<FileInformation>();
public void GatherFileInfo(string path)
{
files.Add(new FileInformation(path));
listboxFiles.DataContext = files;
}
class FileInformation : FileInfo
{
string path = "<whatever>"
FileInfo fileInfo = new FileInfo(path);
public bool selected = false;
public string Name
{
get { return fileInfo.Name }
}
//Manually inherit everything I need???
}
L'avantage de cette situation serait que dans WPF vous pourriez simplement se lier à toutes les propriétés de la FileInformation de classe, y compris ceux de la classe FileInfo héritée.
Je n'ai jamais examiné cette question et je n'ai aucune idée de l'endroit où je devrais commencer à chercher, donc un exemple ou une piste sur la façon de le faire serait utile.
Pourquoi peut » t vous exposer l'objet 'FileInfo' imbriqué dans votre classe' FileInformation' via une propriété publique, au lieu de déclarer un par un les wrappers pour ses propriétés? –
Ce serait une possibilité, mais pour des raisons de lisibilité du code, je me demandais si cela était possible sans avoir à traverser les objets pour se lier à des propriétés comme: 'FileI.FullName'. Ce n'est pas toujours la meilleure pratique non plus. – DerpyNerd
Vous ne devez pas hériter des classes pour des raisons de lisibilité du code. Si quelque chose est nuisible dans le même, vous essayez de l'utiliser. En outre, "Selected" est quelque chose que vous effectuez sur une interface utilisateur, il ne devrait probablement pas exister dans le modèle. – Kcvin