Bunun yararsız olduğunu söyleyemem. Aşağıdaki örneğe, akıcı sözdizimini nasıl destekleyeceğimizi gözlemleyelim. durumlarda, bir Ana bazı base
uygulanmasını oluşturuyor ve akıcı bildirimleri sağlamak istiyorum ki ... nasıl Bu nedenle, sadece bir örnektir götürün, bu kısıtlamayı bu şekilde
public class Parent<TChild>
where TChild : Parent<TChild>
{
public string Code { get; protected set; }
public TChild SetCode(string code)
{
Code = code;
return this as TChild; // here we go, we profit from a constraint
}
}
public class Child : Parent<Child>
{
public string Name { get; protected set; }
public Child SetName(string name)
{
Name = name;
return this // is Child;
}
}
[TestClass]
public class TestFluent
{
[TestMethod]
public void SetProperties()
{
var child = new Child();
child
.SetCode("myCode") // now still Child is returned
.SetName("myName");
Assert.IsTrue(child.Code.Equals("myCode"));
Assert.IsTrue(child.Name.Equals("myName"));
}
}
Lütfen kullanabilirsiniz kısıtlama kullanılabilir
Bunlar "merakla yinelenen" genel kısıtlamalar olarak adlandırılır. Ayrıca bakınız: [Curiouser ve meraklı] (http://blogs.msdn.com/b/ericlippert/archive/2011/02/03/curiouser-and-curiouser.aspx), Eric Lippert, muhtemelen en iyi açıklamadır alabilirsiniz. – Kobi
Bu, gerçek sınıfa bir tür referans almak için yaygın olarak kullanılır. Örneğin IComparable, vb. – leppie
@AlvinWong, tamamen işe yaramaz değil. Değerlerinizi saklayan Foo'ya özellikler ekleyerek bu şekilde ağaç benzeri yapılar oluşturabilirsiniz. Aynı şekilde, Foo kalıtsal olabilir ve bu nedenle bu kısıtlama Foo'nun herhangi bir türevine de izin verecektir. – series0ne