以下是可讀寫的:
private string mvarIniFilePath="";
public string IniFilePath
{
get{return (mvarIniFilePath);}
set{mvarIniFilePath = value;} 
}/////////////////////////////以下是唯讀的:
private string mvarIniFilePath="";
public string IniFilePath
{
get{return (mvarIniFilePath);}
}

解决方案 »

  1.   

    C# 不支持const的这种用法,在.net里没有替代的东西
      

  2.   

    楼上的错了,在C#中有readonly关键字.//exampleusing System;class Student
    {
    public readonly int num;
    public readonly int score=60;
    //readonly字段可在声明时赋值,也可在构造函数中赋值,其他地方不可。 public const int age=22;
    //public const int age;是个错误,const字段须在声明时赋值

    public Student()
    {
    num=71;
    score=100;
          //age=22;这句话是个错误,const字段不可在除了声明以外的任何地方进行赋值
    }
    }class MainEntryPoint
    {
    static void Main()
    {
    Student Me=new Student();

    Console.WriteLine(Me.num+" "+Me.score);
    }
    }//另外,只可在构造函数的参数中对readonly字段用ref或out关键字。
      

  3.   

    MSDN里面有解释const 和readonly的区别和用法,还有static readonly。不过C#如果是象楼上所说,只可在构造函数参数中对readonly字段用ref或out关键字的话,岂不在模式的安全性方面有很大损失?难道要实现参数源的保护,就一定要承担参数的复制代价么?困惑中……
      

  4.   

    To looner(looner):
    这里说的是只读引用,你给出的是属性的保护:只读或者只写等。只读引用在C++里面的作用是:即避免较复杂参数的复制(通过传引用或者传址),又能对参数进行保护防止函数改变,传达给调用者的信息就是,你调用我是安全的,不会对参数造成影响,这个很重要。
      

  5.   

    readonly的作用和楼主要的不同,.net确实没有对应的功能。C++/CLI中使用Modopt来扩展.net的关键字以实现const,但C#里没有这个功能
      

  6.   

    to Rainee(补天)在C#中,所有的引用类型,在参数传递时,都是按引用传递,所以不存在复制对象的开销
      

  7.   

    readonly不知道能不能完成你的要求
      

  8.   

    to cppTrier(cnblogs.com/hush) 
    "在C#中,所有的引用类型,在参数传递时,都是按引用传递,所以不存在复制对象的开销"
    那也未必啊,string類型是引用類型,Update時還不是要復制副本出來
      

  9.   

    没有任何关键字实现这个功能。为了实现这个功能,你需要这样做:一、声明一个类,将其所有的成员变量全部声明为readonly。
    二、保证不将任何不符合这两个条件的类的对象暴露出去,包括在读取器和属性中。或者在暴露时传出它的深拷贝(注意不是浅表拷贝)。
    三、实例化这个类,并将其对象声明为readonly这个对象便是只读的。
      

  10.   

    to looner:string对象在传递时,仍然不产生副本,是按引用传递的。只有在给string引用赋值时,会产生新的string对象,这个是由string类的特殊性造成的,很多其它帖子里都有讨论。你可以试一下下面的代码:
    class Test
    {
    public string s; public void TestString(string p_s)
    {
    if (Object.ReferenceEquals(p_s, s))
    Console.WriteLine("string作为参数传递时,不产生另一个副本");
    } }在Main()中,使用以下代码来测试
    Test t = new Test();
    t.s = "hello";
    t.TestString(t.s);
      

  11.   

    摘自MSDN:
    readonly 关键字是可以在字段上使用的修饰符。当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分发生,或者发生在同一类的构造函数中。只能在下列上下文中进行只读字段的赋值: 当在声明中初始化变量时,例如: 
    public readonly int y = 5;
    对于实例字段,在包含字段声明的类的实例构造函数中;或者,对于静态字段,在包含字段声明的类的静态构造函数中。只有在这些上下文中时,将 readonly 字段传递为 out 或 ref 参数才有效。 ××××××××××××××××
    也就是说,建立一个这样的函数
    public void TestFunc(readonly TestClass cla)
    {
    cla.mnValue ++;
    }
    将无法通过编译。期望用readonly来实现只读引用是行不通的。
      

  12.   

    Ivony() 的说法是比较有道理的,参考这个方式,实现只读引用应该没有问题;
    可是.NET为什么不提供一个简明直观的机制呢?困惑中
      

  13.   

    因为如果加入只读引用的话,就必须要加入const函数的特性,.net的设计者可能觉得这会加大.net的复杂性吧。其实很多学C++的人都不知道const函数有什么用...