获取和设置属性在 c 尖锐不起作用

本文关键字:不起作用 设置 属性 获取 | 更新日期: 2023-09-27 18:33:39

好的,这是我的代码,即使我从书中复制了一个代码并应用了许多限制抛出获取和设置属性,它也不起作用,但没有任何效果。

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

空字符串仍然通过,根本没有例外。我做错了什么吗?

获取和设置属性在 c 尖锐不起作用

您直接设置私有字段name,它不会触发对属性NameSet

您应该访问属性而不是支持字段。所以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;
        }
    }
}

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

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

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

为了避免进一步的混淆,您可以对局部变量使用下划线约定(尤其是当它们与公共变量共享相同的名称时)。

例如:

private string _name;
public string Name

我知道这并不能回答这个问题(许多人已经回答过),但从长远来看它会帮助你......由于问题与范围有关,我认为它是相关的:P

您设置的是name(字段)而不是Name(属性)。您可以从同一文件访问私有字段。这就是为什么(可能是错误的)您可以访问 name .要触发您必须执行的异常,

Program p = new Program();
p.Name = null;
p.name = null;

应该p.Name