Вы можете сделать его абстрактным классом и добавить методы, которые вы не хотите реализовывать, как абстрактные методы.
Другими словами:
public interface IMyInterface
{
void SomeMethod();
void SomeOtherMethod();
}
public abstract class MyClass : IMyInterface
{
// Really implementing this
public void SomeMethod()
{
// ...
}
// Derived class must implement this
public abstract void SomeOtherMethod();
}
Если все эти классы должны быть конкретными, а не абстрактными, вам придется выбросить NotImplementedException
/ NotSupportedException
изнутри методов. Но гораздо лучшей идеей было бы разделить интерфейс так, чтобы реализации классов не приходилось это делать.
Имейте в виду, что классы могут реализовывать несколько интерфейсов, поэтому, если некоторые классы имеют некоторые функциональные возможности, но не все, тогда вы хотите иметь более детальные интерфейсы:
public interface IFoo
{
void FooMethod();
}
public interface IBar()
{
void BarMethod();
}
public class SmallClass : IFoo
{
public void FooMethod() { ... }
}
public class BigClass : IFoo, IBar
{
public void FooMethod() { ... }
public void BarMethod() { ... }
}
Это, вероятно, тот дизайн, который вам действительно нужен.