Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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#类中的成员变量不匹配_C#_Undefined_Members - Fatal编程技术网

C#类中的成员变量不匹配

C#类中的成员变量不匹配,c#,undefined,members,C#,Undefined,Members,我是C#新手,正在写一段代码做一些练习。令我惊讶的是,我可以在C#类中使用未定义的成员变量,就好像它们已经被定义一样。下面是我的代码。在Person类中,我只定义了“myName”和“myAge”,但我可以毫无疑问地使用成员变量“Name”和“Age”。可以编译代码并运行可执行文件。有人能告诉我为什么我可以使用“姓名”和“年龄”而不用定义它们吗?非常感谢, C#代码 ====================================== 使用制度 namespace prj01 { cla

我是C#新手,正在写一段代码做一些练习。令我惊讶的是,我可以在C#类中使用未定义的成员变量,就好像它们已经被定义一样。下面是我的代码。在Person类中,我只定义了“myName”和“myAge”,但我可以毫无疑问地使用成员变量“Name”和“Age”。可以编译代码并运行可执行文件。有人能告诉我为什么我可以使用“姓名”和“年龄”而不用定义它们吗?非常感谢,

C#代码

====================================== 使用制度

namespace prj01
{
class Person
{
    private string myName = "N/A";
    private int myAge = 0;

    public string Name
    {
        get
        {
            return myName;
        }
        set
        {
            myName = value;
        }
    }

    public int Age
    {
        get
        {
            return myAge;
        }
        set
        {
            myAge = value;
        }
    }

    public override string ToString()
    {
        return "Name = " + Name + ", Age = " + Age;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // property
        Console.WriteLine("Simple Properties");

        Person person01 = new Person();
        Console.WriteLine("Person details - {0}", person01);
        person01.Name = "Joe";  // Why can I use "Name"?
        person01.Age = 99;      // Why is "Age" accessible and usable?
        Console.WriteLine("Person details - {0}", person01);

        Console.ReadLine();
    }
}
}

=================================================

您确实定义了它们。就在这里:

public string Name
{
    get
    {
        return myName;
    }
    set
    {
        myName = value;
    }
}

public int Age
{
    get
    {
        return myAge;
    }
    set
    {
        myAge = value;
    }
}

这些在.NET类中称为“属性”。在您当前的代码中,它们本质上是“传递”属性,除了委托对成员变量的访问之外,什么也不做。它们编译成包装这些成员变量的getter和setter方法。

Name和Age是公共属性,它们被类外部的代码用来发送数据,即修改私有变量。如果将public-next-Name更改为private,则由于保护级别的原因,您将无法使用该属性:

.Net类公开两种类型的数据成员

1> :

在您的示例中,它们是myName和myAge,因为它们是私有的,所以您只能在类成员中使用它们

2> 在你们班,他们是名字和年龄。 因为它们是公共的,所以可以在类内外访问它们。 通过属性,您可以使用getter和/或setter。 getter使您能够从属性读取值,例如:

Person person01=新人员()

int xyz=person01.Age;//它在内部调用person01.Age.get()

和设置器启用属性ie的设置值

Person person01=新人员()

person01.年龄=2;//这是内部调用person01.Age.set(2)


希望这能澄清。

因为
名字是我的名字
年龄是我的年龄
对不起,我的错误。非常感谢您对代码的详细解释。