界面中的动态字段 - 如何解决它?

时间:2014-07-10 22:44:51

标签: c#

我有以下界面来定义dynamic AcceptableValue {get; set;}

我知道界面应该总是有一些具体的东西,而不是dynamicobject,但我在如何在没有定义dynamic AcceptableValue的情况下完成这项任务的过程中遇到了一些麻烦。 / p>

我想我可以从接口中取出字段AcceptableValue并在每个类中使用正确的类型声明它,但我认为必须有更好的方法...

    interface IPrerequisite
    {
            string Name { get; set; }

            dynamic AcceptableValue { get; set; }

            string FailureText { get; set; }

            string SuccessText { get; set; }

            bool Validate();
    }

    public class Ram : IPrerequisite
    {
            public Ram(string name = "RAM Requirements", string value = "2048", string successText = "Minimum {0}MB RAM required", string failureText = "Minimum {0}MB RAM required")
            {
                    Name = name;
                    AcceptableValue = value;
                    SuccessText = successText;
                    FailureText = failureText;
            }

            public string Name { get; set; }

            public dynamic AcceptableValue { get; set; }

            public string SuccessText { get; set; }

            public string FailureText { get; set; }

            public bool Validate()
            {
                    var ram = GetRam();
                    return  ram >= AcceptableValue;
            }
    }

    public class DeviceModel : IPrerequisite
    {
            public class Device
            {
                    public string Manufacturer { get; set; }

                    public string Model { get; set; }
            }

            private IList<Device> _value;

            public DeviceModel(string name = "Computer Model Support", IList<Device> value = null, string successText = "Computer Model '{0}' Supported", string failureText = "Computer Model '{0}' not Supported")
            {
                    Name = name;
                    _value = value;
                    SuccessText = successText;
                    FailureText = failureText;
            }

            public string Name { get; set; }

            public dynamic AcceptableValue
            {
                    get { return _value; }
                    set { _value = value; }
            }

            public IList<Device> GetSupportedModels()
            {
                    return _value;
            }

            public void AddSupportedModel(string manufacturer, string model)
            {
                    if (_value.Any(aDevice => aDevice.Manufacturer == manufacturer && aDevice.Model == model))
                    {
                            return;
                    }

                    var device = new Device {Manufacturer = manufacturer, Model = model};
                    _value.Add(device);
            }

            public void RemoveSupportedModel(string manufacturer, string model)
            {
                    var supportedModel = _value.First(device => device.Manufacturer == manufacturer && device.Model == model);

                    _value.Remove(supportedModel);
            }

            private bool IsModelSupported(string manufacturer, string model)
            {
                    return _value.Any(device => device.Manufacturer == manufacturer && device.Model == model);
            }

            public string SuccessText { get; set; }

            public string FailureText { get; set; }

            public bool Validate()
            {

                    return IsModelSupported(GetComputerManufacturer(), GetComputerModel());
            }
    }

0 个答案:

没有答案