将方法参数设置为只读

sha*_*hay 3 .net c# parameters readonly

我如何创建一个方法,使一个对象只读目的

public class Person 
{
    public string Name;
}

public void RunMe(Person p)
{
    p.Name="XXXX";
}

var p =new Person();
p.Name="YYYY";

RunMe(p);
Console.WriteLine(p.Name);
Run Code Online (Sandbox Code Playgroud)

我正在获得XXXX.但我希望person对象不会改变它的值.

Ham*_*jam 6

您可以使用接口来限制访问.将接口而不是具体对象作为参数传递给方法也更好.

public interface IReadablePerson
{
    string Name { get; }
}

public interface IWritablePerson
{
    string Name { set; }
}

public class Person : IReadablePerson, IWritablePerson
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后有这样的方法

public void RunMe(IReadablePerson p)
{
   p.Name = "XXXX"; //compile time error!!!
}
Run Code Online (Sandbox Code Playgroud)


Ian*_*Ian 5

这样做的方法是通过getset访问器,只是不要定义一个集:

public String Name { get; }
Run Code Online (Sandbox Code Playgroud)

这将使您可以将属性视为正常字段的属性.使用方法来设置支持字段下面的属性有点复杂,您可以在msdn上阅读

如果您需要只能设置一次属性,则将其定义set为private并将参数传递给构造函数:

public class Person
{
  public Person(String name)
  {
     this.Name = name;
  }

  public String Name { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)


Jcl*_*Jcl 0

PersonC# 中的类是引用类型,因此如果是 则无法执行您想要执行的操作class

您可以将其设置为值类型(通过将其设置为 a struct),在这种情况下,将传入对象的副本,但这可能会影响程序中的其他一些点,因此如果这样做,请务必小心。