这是我的代码:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace HidingMyAppNameHereSoYouCantStealMyIdeas.Classes._Main
{
public class Theme
{
private Color ForeColor;
private Color BackColor;
public Theme(Color fore, Color back)
{
ForeColor = fore; BackColor = back;
}
public void ApplyTo<T>() where T : Form
{
T.ForeColor = Color.Black;
}
public void ApplyTo(Control control)
{
control.ForeColor = ForeColor;
control.BackColor = BackColor;
}
}
}
我在T
的{{1}}处收到错误说:
错误CS011:'T'是一个类型参数,在给定的参数中无效 上下文
我假设我做错了是尝试访问泛型的属性。
无论如何,我认为我在这里要做的很清楚,因为创建Windows窗体应用程序时T.ForeColor = Color.Black;
通常是一个类而不是像Form应用程序控件那样的变量。
尽管我可以找到解决这个问题的方法,但我想知道是否可以访问T的属性(Form I感兴趣的子类)并更改它以便{{1}中的代码出于学习目的,没有错误。如果不可能,那也完全没问题。
答案 0 :(得分:4)
如果您要更改
中的代码public void ApplyTo<T>() where T : Form
{
T.ForeColor = Color.Black;
}
到
public void ApplyTo<T>(T form) where T : Form
{
form.ForeColor = Color.Black;
}
它应该可以工作,因为你不能访问类本身的属性,只能访问类的对象。
但是,您似乎甚至不需要通用类型 - 您只需使用:
public void ApplyTo(Form form)
{
form.ForeColor = Color.Black;
}