确保接口只读属性不会更改

时间:2014-01-06 22:56:14

标签: .net code-contracts

考虑以下界面:

interface IToto
{
    string Name {get;}
}

使用代码约定,如何确保Name属性值永远不会改变?

我尝试在Contract.OldValue标记的方法中使用ContractInvariantMethod,但显然不支持。还有什么我能做的吗?

2 个答案:

答案 0 :(得分:1)

仅使用接口是不可能的。但是,您可以使用具有抽象类的接口来获取所需内容。抽象类允许您定义功能,但您无法实例化它。因此,在真正的类中,您可以从抽象类继承,并自动获得定义的功能。

看看这个:

namespace ConsoleApplication1
{
    public interface IMyThing
    {
        string Name { get; }
    }

    public abstract class MyThingBase : IMyThing
    {
        public string Name {
            get
            {
                return "Mystringvalue";
            }
        }
    }

    public class MyThing : MyThingBase
    {
        //stuff
    }
}

然后:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var myObject = new MyThing();

            Console.Write(myObject.Name);
        }
    }
}

打印:Mystringvalue

答案 1 :(得分:0)

找到我的答案here。代码合同尚未支持它。