Hmm, what you can do is 'hide' the Action_ methods by implementing those methods explicitly.
If you do this, users can only call those methods when they cast the class back to the interface.
It won't prevent them from having the possibilty to call those methods however, but maybe it will make it less obvious that it is possible.
public class EditField : IEditField
{
public EditField( IStateMachine stateMachine ) {}
void IEditField.Action_Commit() {}
void IEditField.Action_Undo() {}
}
By implementing these methods like this, the user will not be able to do this:
EditField ef = new EditField();
ef.Action_Commit(); // compile-error
However, it is possible to call those methods if they do this:
IEditField ef = new EditField();
ef.Action_Commit();
or
EditField ef = new EditField()
((IEditField)ef).Action_Commit();
But, isn't it a better solution / possible to have those Commit & Undo methods a part of your IStateMachine instead ?
And, if you can't modify the design to have those Commit & Undo methods part of the IStateMachine, then maybe you can create an abstract class instead of the IEditField interface ?
In that abstract class, you can make those Action_ methods protected.