Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一个类可以看到另一个';s变量,另一个可以';T_C# - Fatal编程技术网

C# 一个类可以看到另一个';s变量,另一个可以';T

C# 一个类可以看到另一个';s变量,另一个可以';T,c#,C#,我的课有问题。我试图通过将一些东西移动到另一个类来清理代码 目前我只使用静态方法,所以我不得不,例如 如果我想使用我的MemoryStream并使用它,我必须将它放入方法中: Static Void WorkMS(MemoryStream ms){} 因此,我从不需要从另一个类调用引用,而是该类调用该方法 但是如果我想处理那些不能像那样放置的东西,例如: void ListenRender(Thread ListenThread, Thread RenderThread, Cancellat

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

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

如果我想使用我的
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();
}
public int x;

protected void method()
{
}
它不起作用

此方法位于名为FastMethods的类中

CaptureClass
是另一个(我的主要)类

这两种方法都是公共的,方法
Listen/Render
也是公共的

如果我看一下
CaptureClass
通过
CaptureClass.
得到了什么,它没有显示任何变量、方法或任何东西,它只是显示了表单的内容,比如
ActiveForm
DefaultFont

CaptureClass
是一个带有表单的局部类,如果这很重要的话

我已经尝试过搜索它,但是我找不到任何说明不能从部分类调用方法的内容,所以我不知道问题出在哪里

编辑1:

一个简单的例子:

FastMethods
类获得了一个方法

Static Void Method()
Static Void CapMethod()
CaptureClass
然后可以使用
FastMethods.Method
调用它

现在,
CaptureClass
获得了一个方法

Static Void Method()
Static Void CapMethod()
FastMethods
无法使用
CaptureClass.CapMethod
调用它,因为它甚至不存在

编辑3:

这是正确的吗

CaptureClass
中:

internal void Render(CancellationToken CTS)
{}

internal void Listen(CancellationToken CTS)
{}
快速方法中

 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);
}        

或者我应该改进一下吗?

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

  • 私有-只有类本身可以引用它
  • 受保护-只有类本身和继承它的类才能访问它
  • 内部-只有同一命名空间中的类才能访问它
  • 公共-每个人都可以访问它
对于类,只允许内部和公共访问级别

对于其余部分,如果未明确说明访问级别,例如:

 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();
}
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

问题一点也不清楚,请重新表述。问题只是,我看不到CaptureClass和其他类的任何内容,只有ActiveForm、DefaultFont等(我猜是表单内容),我看不到任何变量、方法、线程或其他任何东西,即使我把它们放在内部、公共或其他任何地方。你说“它不工作”是什么意思?线程一定已经启动了,那么哪里出了问题?请复制整个类代码有人请给这家伙指一个关于面向对象和访问修饰符的C#入门课程/我知道,但是我怎样才能从另一个类访问一个方法,比如“Internal/Public void method(){}”@user2587718阅读我的编辑,让我知道是否还有什么东西丢失了很好!这正是我想要的:)-当我启动这个类时会发生什么,它是否使用了资源或其他我需要检查的东西?@user2587718这些都是一个非常广泛的问题,你应该阅读OOP和垃圾收集器。在谷歌上搜索好吧,我猜它确实使用了一些资源,因为静态方法是首选,但我得到了我想要的,谢谢:)