繁体   English   中英

C#类中成员变量不匹配

[英]mismatch in member variables in C# class

我是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是公共属性,这些属性由类外部的代码用于发送数据,即修改私有变量。 如果将Name旁边的public更改为private,则由于保护级别,您将无法使用该属性: Public,Private,Protected和Nothing之间有什么区别?

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

1> 领域

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

2> 属性在课堂上,他们是姓名和年龄。 由于它们是公开的,因此可以在课堂内外访问。 有了属性,你可以得到getter和/或setter。 getters使您可以从属性中读取值,例如:

人person01 =新人();

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

和setter启用属性的设置值即

人person01 =新人();

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

希望这澄清一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM