我的班级有问题。我试图通过将一些东西转移到另一个类来清理我的代码。
目前我只使用静态方法,所以我不得不这样做。
如果我想使用我的MemoryStream
并使用它,我必须将其放入方法中:
Static Void WorkMS(MemoryStream ms){}
所以,我从来没有必要从其他类调用引用,该类调用该方法。
但是,如果我想处理那些不能那样的东西,例如:
void ListenRender(Thread ListenThread, Thread RenderThread, CancellationTokenSource CTSReceive)
{
CTSReceive = new CancellationTokenSource();
ListenThread = new Thread(() => CaptureClass.Listen(CTSReceive.Token));
ListenThread.Start();
RenderThread = new Thread(() => CaptureClass.Render(CTSReceive.Token));
RenderThread.Start();
}
它不起作用。
此方法位于名为FastMethods
。
CaptureClass
是另一个(我的主要)课程。
两者都是公开的,方法Listen/Render
也是公开的。
如果我查看CaptureClass
与CaptureClass.
有什么关系,它不显示任何变量,方法或任何内容,它只是显示表单的内容,如ActiveForm
,DefaultFont
......
如果重要的话,CaptureClass
是一个带有Form的部分类。
我试过搜索它,但我找不到任何说你不能从部分类调用方法的东西,所以我看不出问题是什么。
编辑1:
一个简单的例子:
FastMethods
上课有一个方法。
Static Void Method()
然后 CaptureClass
可以使用FastMethods.Method
来调用它。
现在,CaptureClass
得到了一个方法。
Static Void CapMethod()
FastMethods
无法使用CaptureClass.CapMethod
来调用它,因为它甚至不存在。
编辑3:
这是否正确。
在CaptureClass
:
internal void Render(CancellationToken CTS)
{}
internal void Listen(CancellationToken CTS)
{}
在FastMethods
:
void ListenRender(Thread ListenThread, Thread RenderThread, CancellationTokenSource CTSReceive)
{
CaptureClass Cap = new CaptureClass();
CTSReceive = new CancellationTokenSource();
ListenThread = new Thread(() => Cap.Listen(CTSReceive.Token));
ListenThread.Start();
RenderThread = new Thread(() => Cap.Render(CTSReceive.Token));
RenderThread.Start();
}
当我打电话给他时:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
FastMethods.ListenRender(ListenThread, RenderThread, CTSReceive);
}
或者有什么我应该改进的吗?
答案 0 :(得分:3)
每个类,每个方法以及每个变量和属性都具有以下访问级别:
只允许内部和公共访问级别的类。
其余部分,如果您没有明确说明访问级别,例如:
public int x;
protected void method()
{
}
然后它们是私有的,这意味着没有人能够看到和使用它们,而不是类本身
了解更多信息,请阅读here
在您需要创建实例的类中使用非静态方法。例如,在课程FastMethods
中,将是这样的:
public class FastMethods
{
public void MeMethod()
{
// Your code
}
}
然后您可以这样访问它:
FastMethods fm = new FastMethods();// Initiate the class
fm.MeMethod();// Call the method