好的,这是我的代码,它不起作用,即使我从书中复制了一个代码并应用了许多限制抛出获取和设置属性,但没有任何效果。
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
,它不会触发针对属性Name
的Set
。
您应该访问属性而不是支持字段。所以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/