Designing a Collection class

B

bg_ie

Hi,

I have a hypothetical class called MyFiles which stores an array of
objects of type MyFile. MyFiles contains functions like
GetOldestFile(), GetLargestFile(), etc.

class MyFiles
{
MyFile[] myFiles;

public MyFiles(MyPath path)
{
myFiles = ...
}
}

When implementing the MyFiles class, is there any way to expose the
private members of MyFile for MyFiles? Or must I create accessors? For
me, it feels like MyFiles is inheriting from MyFile even though this
inheritance is not specified in code. Does this make sense?

Thanks for your help,

Barry
 
P

parez

Hi,

I have a hypothetical class called MyFiles which stores an array of
objects of type MyFile. MyFiles contains functions like
GetOldestFile(), GetLargestFile(), etc.

class MyFiles
{
MyFile[] myFiles;

public MyFiles(MyPath path)
{
myFiles = ...
}

}

When implementing the MyFiles class, is there any way to expose the
private members of MyFile for MyFiles? Or must I create accessors? For
me, it feels like MyFiles is inheriting from MyFile even though this
inheritance is not specified in code. Does this make sense?

Thanks for your help,

Barry

If i have understood you correctly,
you could do the following

class MyFiles : List<MyFile>
{


public new MyFile this[int a]
{
get
{
return base[a];
}
}
}

public class MyFile
{
public string Name { get; set; }

}


in your code, you can have

MyFiles f = new MyFiles();
MyFile ff = new MyFile();
ff.Name = "P";

f.Add(ff);

Console.WriteLine(f[0].Name);
 
M

Marc Gravell

Just a List<MyFile> or a Collection<MyFile> should do.

Note that LINQ might also solve a lot of those "biggest/oldest" issues
too... (note you could add extra extension methods to avoid the two-
pass approach here...)

List<MyFile> files = new List<MyFile>();
long biggestSize = files.Max(file => file.Size);
MyFile biggestFile = files.FirstOrDefault(file => file.Size ==
biggestSize);
DateTime oldestDate = files.Min(file => file.Created);
MyFile oldestFile = files.FirstOrDefault(file => file.Created
== oldestDate);

Marc
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top