A generic function is a function that will work with a set of types to be determined by the caller
so instead
int doubleIt(int a) { return a*2; }
you can say that
T doubleIt<T>(T a){ return a*2; }
this means that you can define one function that can be called as follows:
int intResult = doubleIt(...pass in a int..);
double doubleResult = doubleIt(...pass in a double..);
float floatResult = doubleIt(...pass in a float..);
, , , T.
, T , , T where, T ,
, , , f1 .
Form f1 = null; , T f1 = null;
private void ClickEvent<T>(object sender, EventArgs e) where T: Form, new() {
T f1 = null;
.
.
.
}
private void form1ToolStripMenuItem_Click(object sender, EventArgs e) {
ClickEvent<Form1>(sender, e)
}
private void form2ToolStripMenuItem_Click(object sender, EventArgs e) {
ClickEvent<Form1>(sender, e)
}
, - :
public static Form IsFormAlreadyOpen(Type FormType)
{
foreach (Form OpenForm in Application.OpenForms)
{
if (OpenForm.GetType() == FormType)
return OpenForm;
}
return null;
}
private void ClickEvent<T>(object sender, EventArgs e) where T: Form, new()
{
T f1 = null;
if (IsFormAlreadyOpen(typeof(T)) == null)
{
f1 = new T();
f1.MdiParent = this;
f1.Show();
}
else
{
Form selectedForm = IsFormAlreadyOpen(typeof(T));
foreach (Form OpenForm in this.MdiChildren)
{
if (OpenForm == selectedForm)
{
if (selectedForm.WindowState == FormWindowState.Minimized)
{
selectedForm.WindowState = FormWindowState.Normal;
}
selectedForm.Select();
}
}
}
}
private void form1ToolStripMenuItem_Click(object sender, EventArgs e) {
ClickEvent<Form1>(sender, e)
}
private void form2ToolStripMenuItem_Click(object sender, EventArgs e) {
ClickEvent<Form1>(sender, e)
}
: Linq, - .
using System.Linq;
public static Form IsFormAlreadyOpen(Type FormType) {
return Application.OpenForms.Where( f => f.GetType() == FormType).FirstOrDefault();
}
private void ClickEvent<T>(object sender, EventArgs e) where T: Form, new()
{
T selectedForm = IsFormAlreadyOpen(typeof(T);
if (selectedForm == null) {
(new T() { MdiParent = this; }).Show()
}
else {
this.MdiChildren.Where(o => o == selectedForm).ForEach(
openForm => {
selectedForm.WindowState = (selectedForm.WindowState == FormWindowState.Minimized) ? FormWindowState.Normal : selectedForm.WindowState;
openForm.Select();
}
);
}
}
private void form1ToolStripMenuItem_Click(object sender, EventArgs e) {
ClickEvent<Form1>(sender, e)
}
private void form2ToolStripMenuItem_Click(object sender, EventArgs e) {
ClickEvent<Form2>(sender, e)
}
, , , linq .