试图将一个类成员公开为public和readonly或公共常量

时间:2012-12-06 17:19:33

标签: c# struct asp.net-4.0 scope

我坚持使用一个简单的变量赋值,唯一能让它变得复杂的结论 是因为我需要将struct值设为私有,因此它们不会被修改为alswhwere

并且能够以安全的方式使用结构的值,我试图使用公共readonly变量。这就是我如何在只读模式下与应用程序共享信息,这应该不简单吗?

我错过了什么?

当应用程序在Page_Load中启动时,我正在调用SetTablesMetaDetails()

  
protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
      .... some other App inits here
    }

    else
    {

    }    

    // this method should be the one that instanciates the DbTable struct
   //..thus sets the values of tables "Name" and "ID"
   currProjData.setTablesReferences(); 
}
  • struct将用于指定值:
            public class DBMetaDetails
            {
                public struct DbTable
                {
                    public DbTable(string tableName, int tableId): this()
                    {
                        this.TableName = tableName;
                        this.TableID = tableId;
                    }

                    public string TableName { get;  set; }
                    public int TableID { get;  set; }
                }
            }
  • 保存值的当前项目类
public static class currProjData 
{
    static DBMetaDetails.DbTable CustomersMeta = new DBMetaDetails.DbTable();
    static DBMetaDetails.DbTable TimesMeta = new DBMetaDetails.DbTable();

    public static void SetTablesMetaDetails()
    {

        TimesMeta.TableID = HTtIDs.TblTimes;
        TimesMeta.TableName = HTDB_Tables.TblTimes;

        CustomersMeta.TableID = HTtIDs.TblCustomers;
        CustomersMeta.TableName = HTDB_Tables.TblTimeCPAReport;

    }

    public static readonly int CustomersTid = CustomersMeta.TableID;
    public static readonly string CustomersTblName = CustomersMeta.TableName;

    public static readonly int TimesTid = TimesMeta.TableID;
    public static readonly string TimesTblName = TimesMeta.TableName;
}

我的问题是,我需要将这两组表格(Tid& TblName)公开给应用程序的其余部分,但是当应用程序启动时,它会调用SetTablesMetaDetails()

并且最后四行没有执行,我尝试将此部分移到SetTablesMetaDetails() 但这不是正确的语法,我在犯错误,

完成CustomersTid的分配的正确方法是什么? (其余3人也是如此)

public static readonly int CustomersTid = CustomersMeta.TableID;

这就是我所缺少的原因我不知道如何以与上面的结构相同的方式初始化它...优先在一个方法调用中

2 个答案:

答案 0 :(得分:4)

如果要在本地修改它们,但要全局读取它们,请在setter中添加一个修饰符:

public string TableName { get;  private set; }
public int TableID { get;  private set; }

如果您愿意,也可以是internalprotected

答案 1 :(得分:2)

使用属性

public static int CustomersTid { get { return CustomersMeta.TableID; } }
public static string CustomersTblName { get { return CustomersMeta.TableName; } }

public static int TimesTid  { get { return TimesMeta.TableID; } }
public static string TimesTblName  { get { return TimesMeta.TableName; } }