Reputation: 67233
If I have a collection object which is empty but needs to be filled and is going to be used by a class (say class Foo), then is it best to do the filling in the constructor?
Something like:
List<string> strings = new List<string();
strings.Add("sjsjhsj");
// So on...
Or should it be in a static private ctor? State is not being changed of the containing class so this can be static, right?
BTW, if I write this.Name = name; or:
john.Name = name;
// Instance method passing in john as a Person object.
Are these both known to be changing state and thus should not be static? Or is it only with instance?
If I need a collection which I want to be able to change the contents of without a recompile, I should use a txt file or xml as the source. Which is faster when using for collections? Txt file will use ReadAllLines(); and XML will use a NodeNavigator (not sure of exact method/object names).
Thanks
Upvotes: 1
Views: 171
Reputation: 20157
If the collection has a static, known set of values at compile time, you may, in C# 3.0 (VS 2008), use collection initializer syntax in your class definition:
private static readonly IList<string> strings = new ReadOnlyCollection<string>(
new List<string>(5)
{
"sjsjhsj",
"string 2",
"string 3",
"string 4",
"string 5"
});
ReadOnlyCollection lives in the System.Collections.ObjectModel
namespace. The 5 in the List<string>
constructor refers to its capacity and, if you know the number in advance, will result in runtime optimization.
Upvotes: 0
Reputation: 564641
I think you have a misunderstanding of the meaning of "static".
"static", in C#, does not mean that the state does not change. You can have static variables that have changing state.
In C#, "static" refers to the scope of the variable - not its mutability. When you define a variable as static (and use a static ctor), you're working at the class level instead of the instance level.
If your variable is specific to the class, and not an instance of the class, then it may be appropriate to make it static.
Upvotes: 2
Reputation:
First, static constructors cannot be public / private. They simply exist.
If the same instance of your collection is going to be shared amongst all instances of the owning class, then it can be static.
Static doesn't mean it doesn't change state. It can still change. The difference is static fields are shared between all instances of the class, so mutable operations on that field need to be coordinated. If all instances of the class will always use the same data, make it static.
Whether a text file or an xml file is faster for you depends on the data.
Upvotes: 3