0

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

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

4

3 回答 3

2

你确实定义了它们。就在这儿:

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

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

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

于 2013-09-17T23:40:38.507 回答
0

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

1>领域

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

2>属性 在你的类中,它们是名称和年龄。由于它们是公开的,因此可以在课堂内外访问。使用属性,您可以获取和/或设置器。getter 使您能够从属性中读取值,例如:

人 person01 = new Person();

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

和 setter 启用属性的设置值,即

人 person01 = new Person();

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

希望这可以澄清。

于 2013-09-17T23:51:14.307 回答
0

Name 和 Age 是公共属性,这些被类外部的代码用来发送数据,即修改私有变量。如果您将 Name 旁边的 public 更改为 private,您将无法使用该属性,因为保护级别:Public、Private、Protected 和 Nothing 之间有什么区别?

于 2013-09-17T23:42:38.770 回答