C# 和只读引用类型(例如,数据表)

本文关键字:数据表 例如 只读 引用类型 | 更新日期: 2023-09-27 18:34:54

假设我有以下 C# 类:

class MyClass ()
{
    public readonly DataTable dt = new DataTable();
    ...
}

引用类型的readonly的含义是什么?我刚刚实现了这段代码,用户能够修改数据表。

如何防止用户写入或更改我的数据表(或任何一般对象(? 即,只是读取访问权限。显然,使用属性在这里无济于事。

C# 和只读引用类型(例如,数据表)

只读

意味着你不能重新分配变量 - 例如,以后你不能为dt分配一个新的DataTable。

至于使对象本身只读 - 这完全取决于对象本身。没有使对象不可变的全局约定。

我没有看到任何具体的东西来实现这一点。NET的数据表,但一些选项是

  1. 确保用户在数据库本身中没有修改权限(最安全(
  2. 在绑定到它的任何网格/控件上查找 ReadOnly 属性(用户也清楚这是只读的(

你可以创建一个这样的类:

class MyClass
{
    private DataTable dt = new DataTable();
    public MyClass()
    {
       //initialize your table
    }
    //this is an indexer property which make you able to index any object of this class
    public object this[int row,int column] 
    {
        get
        {
            return dt.Rows[row][column];
        }
    }
    /*this won't work (you won't need it anyway)
     * public object this[int row][int col]*/
    //in case you need to access by the column name
    public object this[int row,string columnName]
    {
        get 
        {
            return dt.Rows[row][columnName];
        }
    }

}

并像这里这样使用它:

 //in the Main method
 MyClass e = new MyClass();
 Console.WriteLine(e[0, 0]);//I added just one entry in the table

当然,如果你写了这个声明

e[0,0]=2;

它将产生类似于以下内容的错误:属性或索引器 MyNameSpace.MyClass.this[int,int] 不能分配给 --它是只读的。

只读

意味着数据表将是运行时常量,而不是编译时常量