一类可以看到对方的变量,另一类不可以吗?

时间:2013-08-25 08:08:36

标签: c#

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

目前我只使用静态方法,所以我不得不这样做。

如果我想使用我的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也是公开的。

如果我查看CaptureClassCaptureClass.有什么关系,它不显示任何变量,方法或任何内容,它只是显示表单的内容,如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);
}        

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

1 个答案:

答案 0 :(得分:3)

每个类,每个方法以及每个变量和属性都具有以下访问级别:

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

只允许内部和公共访问级别的类。

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

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