-2

我的课有问题。我试图通过将一些东西移到另一个类来清理我的代码。

目前我只使用静态方法,所以我不得不,例如。

如果我想使用 myMemoryStream并使用它,我必须将它放入方法中:

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.,它不会显示任何变量、方法或任何东西,它只是显示看起来形式的东西,比如ActiveFormDefaultFont...

如果重要的话,这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);
}        

或者有什么我应该改进的吗?

4

1 回答 1

3

每个类、每个方法、每个变量和属性都有一个访问级别,可以是:

  • private - 只有类本身可以引用它
  • protected - 只有类本身和继承它的类可以访问它
  • internal - 只有同一命名空间中的类可以访问它
  • 公共 - 每个人都可以访问它。

对于类,只允许内部和公共访问级别。

其余的,如果您没有明确说明访问级别,例如:

public int x;

protected void method()
{
}

然后它们是私有的,这意味着除了班级本身之外没有人能够看到和使用它们

欲了解更多信息,请阅读此处

要在类中使用非静态方法,您需要创建一个实例。例如在课堂FastMethods上,将是这样的:

public class FastMethods
{
   public void MeMethod()
   {
      // Your code
   }
}

然后你可以像这样访问它:

FastMethods fm = new FastMethods();// Initiate the class
fm.MeMethod();// Call the method
于 2013-08-25T08:29:20.483 回答