好的,这是我的代码它不起作用,即使我从书中复制了一个代码并应用了许多限制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)
空字符串仍然存在,并且完全没有例外.难道我做错了什么.
您正在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