title: Derived Class Calling static method of base class in its own static method
body: <p>I have read through the follow SO articles</p>
  
  <ul>
  <li><a href="https://stackoverflow.com/questions/603177/c-how-do-i-call-a-static-method-of-a-base-class-from-a-static-method-of-a-deri">C#: How do I call a static method of a base class from a static method of a derived class?</a></li>
  <li><a href="https://stackoverflow.com/questions/5060124/can-i-have-a-base-class-where-each-derived-class-has-its-own-copy-of-a-static-pr">Can I have a base class where each derived class has its own copy of a static property?</a></li>
  <li><a href="https://stackoverflow.com/questions/1380087/whats-the-correct-alternative-to-static-method-inheritance-c">What&#39;s the correct alternative to static method inheritance?</a></li>
  </ul>
  
  <p>All seem very close to my question and have good answers, but they do not seem to answer my question other than to say that I need to make the method non-static.</p>
  
  <p>an example:</p>
  
  <pre><code>abstract public class baseClass
  {
      private static List&lt;string&gt; attributeNames = new List(new string {"property1","property2"});
      // code for property definition and access
      virtual public static bool ValidAttribtue(string attributeName)
      {
          if (attributeNames.Contains(attributeName))
              return true;
          else
              return false;
      }
  }
  class derivedA : baseClass
  {
      private static List&lt;string&gt; attributeNames = new List(new string {"property3","property4"});
      // code for property definition and access
      public static override bool ValidAttribute(string attributeName)
      {
          if (attributeNames.Contains(attributeName))
          {
              return true;
          }
          else
          {
              return base.ValidAttribute(attributeName);
          }
      }
  }
  class derivedB : baseClass
  {
      private static List&lt;string&gt; attributeNames = new List(new string {"property10","property11"});
      // code for property definition and access
      public static override bool ValidAttribute(string attributeName)
      {
          if (attributeNames.Contains(attributeName))
          {
              return true;
          }
          else
          {
              return base.ValidAttribute(attributeName);
          }
      }
  }
  </code></pre>
  
  <p>derivedA would have properties 1,2,3,4 while derivedB would have properties 1,2,10,11.
  The list of properties seems to be a class specific value and can not be changed at any point.  I would think it then would be static.</p>
  
  <p>Is my design wrong in the sense that I am trying to use static methods when they should not be?</p>
  
  <p>The above example makes me think that inheritance of static methods would be needed, yet it seems that trying to do this is a design flaw.  Can anyone help me to understand what is wrong with coding or structuring classes in this manner?</p>