我可能会发现这一切都错了,但我有一个名为CategoryControl的用户控件,可能会有很多人喜欢它,因此我认为它的许多功能都可以更好地用作静态方法.我想知道是否有一种"更好"的方式来访问这些方法,然后在整个类中传递一个实例.这些方法是公共静态的,因为它们将通过其他方法更新.想到了扩展方法的想法..?
public CategoryControl(UserCategory userCategory)
{
InitializeComponent();
PopulateControl(userCategory, this);
}
private static void PopulateControl(UserCategory userCategory, CategoryControl instance)
{
SetCategoryTitle(userCategory, instance);
SetPercentCorrect(userCategory, instance);
SetQuestionsMissed(userCategory, instance);
SetBackgroundBar(userCategory, instance);
SetForegroundBar(userCategory, instance);
}
Run Code Online (Sandbox Code Playgroud)
更新::
更长的故事是我在屏幕上有一个Panel,该面板包含相关的用户类别.相关我的意思是用户可以选择更改课程,从而显示一组新的类别.用户还可以基于他们与软件的交互来改变类别的值.所以...
面板显示课程的类别.
我在面板中维护一个活动的类别控件列表,主窗体告诉面板何时绘制一组新的类别.
public void InitializeProgressPanel(UserCategories parentCategories)
{
Contract.Requires(parentCategories != null, "parentCategories is null.");
RemoveAllControlsFromList(_categoryControls);
UserCategories sortedUserCategories = parentCategories.SortByWorst();
int categoriesCount = parentCategories.Count();
int spacer = (Height - (CategoryControl.Controls_Height * categoriesCount)) / categoriesCount+1;
for (int i = 0; i < sortedUserCategories.Count; i++)
{
CategoryControl cc = new CategoryControl((UserCategory)sortedUserCategories[i]);
cc.Left = 0;
if (i == 0)
cc.Top = spacer;
else
cc.Top = (Controls[i - 1].Bottom + spacer);
Controls.Add(cc);
_categoryControls.Add(cc);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我有一个可以扩展的课程,我当然不会制作扩展方法.请记住,扩展方法的目的是扩展您自己无法扩展的类型.
那么当前的问题是,如果你说:
class C
{
public void Foo() { ... }
}
Run Code Online (Sandbox Code Playgroud)
要么
class C
{
public static void Foo(C c) { ... }
}
Run Code Online (Sandbox Code Playgroud)
我会问一些类似的问题:
更新:
还有一些问题我会问自己:
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |