No, absolutely not - and here's why... This code still has to work:
BaseProvider provider = new TestProvider();
provider.NewItem(10);
That's just the normal requirements of polymorphism. You can't change a signature when you're overriding, because callers may be considering your instance in terms of the base class instead. (Indeed, if they're not doing so, why bother having the abstract method at all?)
Now you can overload the method:
public override void NewItem(int type)
{
NewItem((MyEnum) type);
}
public void NewItem(MyEnum type)
{
...
}
That's not quite the same thing, but it probably achieves what you want.
Alternatively, you could make BaseProvider
generic:
public abstract class BaseProvider<T>
{
public abstract void NewItem(T type);
}
public class TestProvider : BaseProvider<MyEnum>
{
public override void NewItem(MyEnum type)
{
}
}