限制类和类属性
回答
您遇到的困难是您试图使用连词(AND
)来表示分词(OR
)。
当你有一个像
class Foo
{
public Something Property1 { get; set; }
public SomethingElse Property2 { get; set; }
public Whatever Property3 { get; set; }
}
一束性质的一类你是说foo是:
Something
和SomethingElse
和Whatever
。
但是,你真正想说的是foo是:
Something
ORSomethingElse
或Whatever
。
由于David Arno在他的回答中提到,像F#这样的ML语言有一种使用歧视联合表达这种想法的紧凑方式。但是,更大的概念是在类型系统中表达分离概念(即逻辑OR
)的方式。 C#也可以很容易地表达总和类型,虽然比F#有更多的输入(没有双关意图)。
public class Foo
{
public Bar Property { get; set; }
}
public abstract class Bar
{
public class Something : Bar
{
}
public class SomethingElse : Bar
{
}
public class Whatever: Bar
{
}
}
现在我们有你想要什么:Foo
类型的对象要么是一个Something
或SomethingElse
或Whatever
,但他们只能在任何特定时间的事情之一。
我真的很喜欢这种方法:D – rexdefuror
有没有办法内置到C#来做到这一点。你所描述的是通过discriminated unions in F#处理的,但是C#没有这样的类型。尽管如此,你可以编写自己的联合课来提供这种行为。
谢谢,我会研究它。 – rexdefuror
可以实现像这样一类
public class OneProp
{
private string val1;
public string Value1 { get { return val1; } };
private string val2;
public string Value2 { get { return val2; } };
public void SetValue(string propName, string propValue)
{
// null all values here
val1 = null;
val2 = null;
switch(propName)
{
case "Value1":
val1 = propValue;
break;
case "Value2":
val1 = propValue;
break;
}
}
}
然后创建它的一个实例;
OneProp val = new OneProp();
val.SetValue("name", "value");
你也可以在构造函数中做到这一点。
- 1. 限制属性类型
- 2. 限制属性类型与元类
- 3. XSD.exe限制基类型属性
- 4. MATLAB:发现受限制的类属性
- 5. 限制子类中的访问属性
- 6. 属性和类
- 7. 将属性限制为类或属性可行吗?
- 8. 限制自定义属性的属性类型
- 9. 类和属性的属性
- 10. 是否可以将自定义属性的属性用法限制为仅限某类型/超类型的类?
- 11. XSD属性与类型和属性与限制有什么区别?
- 12. xsd:复杂类型与儿童,属性和限制
- 13. 访问类库中的方法和属性,但有限制
- 14. 带属性和限制的XSD自定义类型
- 15. 将限制和属性添加到复杂类型
- 16. xsd限制和属性
- 17. XSD属性限制和值
- 18. 类属性和__setattr__
- 19. O.O.P和类属性
- 20. XMLHttpRequest和类属性
- 21. 类和属性VB.NET
- 22. Perl6类属性中的类型强制
- 23. 强制类属性的子类
- 24. 类:属性属性
- 25. 类型参数和上类型限制
- 26. GHC-api和类型检查类限制
- 27. C++基类和派生类的限制
- 28. XSD属性限制
- 29. C#属性限制
- 30. 类型属性类
您可以编写自己的自定义验证器并使用IValidateableObject接口 –
这听起来不错,您如何看待自定义属性进行验证?可以很好地工作以及... – rexdefuror