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对象不会改变它的值.
您可以使用接口来限制访问.将接口而不是具体对象作为参数传递给方法也更好.
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)
这样做的方法是通过get和set访问器,只是不要定义一个集:
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)
PersonC# 中的类是引用类型,因此如果是 则无法执行您想要执行的操作class。
您可以将其设置为值类型(通过将其设置为 a struct),在这种情况下,将传入对象的副本,但这可能会影响程序中的其他一些点,因此如果这样做,请务必小心。