在c sharp中获取和设置属性不起作用

Sha*_*hah 1 c# c#-4.0

好的,这是我的代码它不起作用,即使我从书中复制了一个代码并应用了许多限制throw get和set属性但没有任何工作.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        private string name;
        public string Name
        {
            get 
            {
                return name;
            }
            set
            {
                if (string.IsNullOrEmpty(value))
                      throw new ArgumentNullException("value");

                name = value;

            }

        }
        static void Main(string[] args)
        {
            Program p = new Program();
            p.name = null;
            Console.WriteLine("{0}", p.name);
            Console.ReadLine();
        }
    }
}**
Run Code Online (Sandbox Code Playgroud)

空字符串仍然存在,并且完全没有例外.难道我做错了什么.

Hab*_*bib 6

您正在name直接设置私有字段,它不会触发Set反对属性Name.

您应该访问该属性而不是支持字段.所以p.name应该是p.Name.

编辑:如果你将你的属性和相关逻辑放在一个单独的类中会更好:

class SomeClass
{
    private string name;
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            if (string.IsNullOrEmpty(value))
                throw new ArgumentNullException("value");

            name = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在类中创建该类的实例,Program如:

class Program
{
    static void Main(string[] args)
    {
        SomeClass p = new SomeClass();
        p.Name = null;
        Console.WriteLine("{0}", P.name);
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你不会注意到你不能访问name字段,而只是访问public属性Name