在不同的类中使用某些变量(C#)

时间:2011-02-26 17:02:21

标签: c# class variables


我是C#的新手,我正在尝试一些事情。我在form1.cs中有一个标签(名为'newLabel')。我有一个名为'methods.cs'的类。在这个课程中我有方法

public static void updateLabel()

我想做的是:

public static void updateLabel() 
{
    newLabel.Text = "New Value";
}

但是这不起作用,可能是因为方法在methods.cs中,而newLabel在form1.cs中。 我对声明的变量有同样的问题。在methods.cs中我有变量

int value;

但我无法在form1.cs中使用此变量。我通过做

来解决这个问题
public static int value { get; set; }

我不知道它做了什么,但它有效,但我不知道如何用标签来应用这个技巧。
有人可以帮我吗?
谢谢!

4 个答案:

答案 0 :(得分:4)

您应该阅读有关OOP和封装的内容。基本上你想要的形式 访问另一个对象(您的类)中的私有字段 - 这受到封装的限制,这就是您遇到问题的原因 - 您可以通过将这些字段和方法添加到您的类通过制作声明的“公共”接口来绕过它们他们的公共属性和方法,即在您的示例中:

public int Value {get;set;}

有时使用合成,即在您的示例中,因为您的类直接访问表单,您可以在类上拥有表单属性:

public Form ViewForm {get;set;}

答案 1 :(得分:3)

最好是从教程中学习C#,但这个特定问题的答案在于“范围”

本质上,范围是变量,类,函数和对象的可见性。标记为“private”的变量只能在创建它的东西中看到(如果它在函数内部创建,它将始终是私有的,并且函数内定义的任何变量只能在该函数内使用)。如果它是在类中创建的,只有该类可以使用它。

可以从该类外部看到表示为public的变量或函数(这只能在类中完成)。为此,您将调用myClass.myVariable来访问变量或myClass.myFunction()来访问该函数。

要表示对象的可见性,请使用关键字“public”或“private”。注意:这仅适用于类中的变量和函数(它也适用于类中的其他内容,例如嵌套类和结构,但这不在本基本介绍的范围内)。

例如:

class myClass
{
    private int myInt;
    public void myfunction()
    {
        myInt = 1;
    }
}

这将有效,因为myCnt中的任何内容都可以看到myInt

class myOtherClass
{
    private void myfunction()
    {
        myClass myObject = new myClass();
        myObject.myInt = 2;
    }
}

这不会,因为myInt是myObject的私有,只有myObject可以更改它。 myOtherClass没有权限,也看不到它。

class myOtherClassTwo
{
    private void myfunction()
    {
        myClass myObject = new myClass();
        myObject.myFunction();
    }
}

幸运的是,这将有效。 myFunction在myClass类中设置为public,因此可以被类外的任何人看到。

现在您使用的关键字static具有完全不同的含义。我建议你不要使用它,直到你了解它为止,因为你只是为你的问题增加了额外的复杂性。

我希望这已经解决了问题,但我必须敦促你遵循一些真正的教程,因为这些基础必须彻底详细,否则你将会被发现。

答案 2 :(得分:1)

由于您的updateLabel方法访问表单内的标签,正确的面向对象设计将指示此方法也应该在表单中。然后您可以访问newLabel

从技术上讲:newLabel并不意味着表单对象之外的任何内容。您可以拥有表单的多个副本,这意味着您newLabel的几个副本;它应该指的是哪一个?当然计算机不会在那里猜测;它会指望你告诉它你要使用哪种形式。

您无法访问value变量的原因是因为它是私有的。如果您将其更改为:

public static int value;

然后它会起作用。

答案 3 :(得分:0)

从Form1中,调用mothods类中的updateLabel方法:

methods updateMethod = new methods();
newLabel.Text = updateMethod.updateLabel();

在方法类中使用此方法:

public static string updateLabel(){
return "New Value";
}