public class ConfigOpt { private static DataSet dsOptions; private static string _ConfigFileName; public static string ConfigFileName { get { return _ConfigFileName; } } public static void Initialize(string paraConfigFile) { _ConfigFileName = paraConfigFile; dsOptions = new DataSet("ConfigOpt"); if (File.Exists(paraConfigFile)) { dsOptions.ReadXml(paraConfigFile); } else { DataTable dt = new DataTable("ConfigValues"); dt.Columns.Add("OptionName", System.Type.GetType("System.String")); dt.Columns.Add("OptionValue", System.Type.GetType("System.String")); dt.Columns["OptionName"].ColumnMapping = MappingType.Attribute; dt.Columns["OptionValue"].ColumnMapping = MappingType.SimpleContent; dsOptions.Tables.Add(dt); } } public static void WriteOptions() { dsOptions.WriteXml(_ConfigFileName, XmlWriteMode.WriteSchema); } public static string GetOption(string paraOptionName) { DataView dv = dsOptions.Tables["ConfigValues"].DefaultView; dv.RowFilter = "OptionName='" + paraOptionName + "'"; if (dv.Count > 0) { return dv[0]["OptionValue"].ToString(); } else { return ""; } } public static void SetOption(string paraOptionName, string paraOptionValue) { DataView dv = dsOptions.Tables["ConfigValues"].DefaultView; dv.RowFilter = "OptionName='" + paraOptionName + "'"; if (dv.Count > 0) { dv[0]["OptionValue"] = paraOptionValue; } else { DataRow dr = dsOptions.Tables["ConfigValues"].NewRow(); dr["OptionName"] = paraOptionName; dr["OptionValue"] = paraOptionValue; dsOptions.Tables["ConfigValues"].Rows.Add(dr); } } }I have removed some of the overloads I created. This class works really well, but I am currious to find out more about how a class that has only static members works. Here are some of the questions I have: