In this article, I will try to make understand the importance of the where keyword used as a part of a generic class context.
IntroductionIn this article, I will try to make understand the importance of the where keyword used as a part of a generic class context through answering two questions why? And When or in witch case the where keyword is used.Why?"Where" keyword is used to specify certain constraints according to types those used as generics, I mean "where" is used to attach the T undefined generic type to a special and already defined type.When?As an answer to this question, I give this example. Suppose that you have an abstract class named Point and its implementation is as under:
public abstract class Point
{
public Point() { }
public abstract string Name
get;
set;
}
public abstract void Reset();
public abstract int Dimension();}
public class _2DPoint<U>:Point
private U _x;
private U _y;
private string _Name;
public _2DPoint():base() {}
public _2DPoint(U x, U y,string Name)
this.x = x;
this.y = y;
this.Name = Name;
public U x
get { return _x; }
set { _x = value; }
public U y
get { return _y; }
set { _y = value; }
public override string Name
get
{ return _Name; }
set
{ _Name = value; } }
public override int Dimension()
{ return 2; }
public override void Reset()
x = default(U);
y = default(U);
class _3DPoint<U>:Point
private U _z;
public _3DPoint():base() { }
public _3DPoint(U x, U y,U z, string Name)
this.z = z;
public U z
get { return _z; }
set { _z = value; }
{ _Name = value; }
{ return 3; }
z = default(U);
public class PointCollection<T>
List<T> oList;
public PointCollection()
oList = new List<T>();
public T this[int index]
get { return oList[index]; }
set { oList[index] = value; }
public void AddItem(T element)
oList.Add(element);
public class PointCollection<T> where T : Point
}}A
public void GetDimension(int index)
MessageBox.Show(oList[index].Dimension().ToString());
}If you want to try the code, you can add some derived points elements within the scope of your main bloc of code as follow:void Main(string[]args)
PointCollection<Point> x = new PointCollection<Point>();
x.AddItem(new _2DPoint<int>(1,1,"p1"));
x.AddItem(new _3DPoint<double>(1,2,1,"p2"));
x.AddItem(new _3DPoint<int>(1, 2, 3, "p3"));
x.GetDimension(0);
New Features in C# 6.0