Во-первых, вам нужно понять, что выбор используемых имен (const и nonconst) очень скуден. Const обычно ссылается на идею, что значение равно const ant, что означает, что его нельзя изменить.
Глядя на два интерфейса, IConstNameValuePair
определяет только метод доступа к свойству get. Когда у вас есть экземпляр Stuff
, который был приведен к IConstNameValuePair
, тогда у вас фактически есть неизменяемый экземпляр, потому что через интерфейс невозможно изменить значения.
Интерфейс INameValuePair
определяет методы доступа к свойствам get и set. Когда у вас есть экземпляр Stuff
, который был приведен к INameValuePair
, тогда у вас фактически есть изменяемый экземпляр, потому что через интерфейс вы можете изменять значения.
При этом, безусловно, существуют более подходящие способы решения этой проблемы, чем использование двух разных интерфейсов.