I have an interface for a base class, and every class that inherits from the base class should have an identifying field which tells the application what kind of object it is.
I wanted to use this property in two different ways:
Without creating an instance of the object
if (someValue == TestA.Id)
return new TestA();
elseif (someValue == TestB.Id)
return new TestB();
And as a property of the interface
void DoSomething(ITest testObject)
{
SomeValue = testObject.Id;
}
Is there an easy way to define the Id field in the interface, but still have it available to use without creating an instance of the class?
Right now I am using the following code. I could add a read-only Id property to the interface which returns the const string, however I was hoping there was a simpler way that I’m just not aware of.
public interface ITest
{
}
public class TestA : ITest
{
public const string Id = "A";
}
In short – no.
In order to be able to do this, you’d need to be able to specify this as a instance property on the interface (and implement it in the instance), and as a static property on the type.
The compiler won’t let you do this.