c# - 在 c sharp 中获取和设置属性不工作

标签 c# c#-4.0

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

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

空字符串仍然通过并且没有任何异常。我是不是做错了什么。

最佳答案

您正在直接设置私有(private)字段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

关于c# - 在 c sharp 中获取和设置属性不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19138836/

相关文章:

c#-4.0 - 使用 Moq 模拟存储库时出现问题

c# - 泛型的问题

c#-4.0 - 是否可以在 C# 中仅使用数据集来使用 NHibernate

c# - 根据MVVM中的复选框列表选择启用WPF按钮

c# - 如何通过动态创建客户端代理来使用 WCF 服务

c# - 在 MySQL 中存储字符串

c# - 未将对象引用设置为行 if (!string.IsNullOrEmpty(tdcd.Text) && !string.IsNullOrEmpty(tdrcd.Text)) 处的对象实例

c# - 多目标 .NET 程序集以在 .NET 4.5 和 .NET 4 上使用异步/等待

javascript - 从 typescript 将值作为空字符串传递给 WEb API

c#-4.0 - ASP.NET MVC 4 cookie 消失