写了一个类库
init.cs
--
public class init{
        private string _connectionstring;
        public string ConnectionString
        {
            get { return _connectionstring; }
            set { _connectionstring = value; }
        }
}
file.cs
public class file{
  public init = new init();
  public string outputs{
    return init.ConnectionString;
  }
}引用时:abc.aspx    public init _init = new init();
    public file _file = new file();...._init.ConnectionString = "aaaaaaaaaaaaaa";
Response.Write(_file.outputs());返回为空,为何???

解决方案 »

  1.   

    你有执行_file.init = _init吗?
    不然,你从未对_file.init.ConnectionString赋值,当然是空
      

  2.   

    付值的时候应当是:_file.init.ConnectionString = "aaaaaaaaaaaaaa";或者:_init.ConnectionString = "aaaaaaaaaaaaaa";
    _file.init = _init;
      

  3.   

    如果一定要这样调用的话, 就这样来..      public string ConnectionString{
           get { return _connectionstring; }
           set { _connectionstring = value; }
         }file.cs
    public class file{
      public init = new init();
      public string outputs{
        return init.ConnectionString;
      }
    }
    不是的话, 得把两个类关系理顺, 不然不在一个可视空间...可以让File从info继承public class file: info
      

  4.   

    没有对Init中的ConnectinString赋值
      

  5.   

    public init _init = new init();
        public file _file = new file();你的_file又不是_init的成员函数,当然返回空了...
      

  6.   

    _file.init.ConnectionString = "aaaaaaaaaaaaaa";
      

  7.   

    我的意思是,动态设置类(INIT初始化类)库中的SQL连接。将SQL连接设置的方法放在一个固定的类名下,
    其他一些方法在不同的类下面。用的时候方便一点。每次只要使用INIT类设置一些基本参数,其他方法就直接用。我不大会描述,大家不要见笑。
      

  8.   

    我再说详细一点,希望大家帮帮忙,100分全给耐心帮助我解决的朋友。类库文件: Init.cs
    ---------
    namespace CX.PPP
    {
        public class Init : IRequiresSessionState
        {
            private string _connectionstring;        public string ConnectionString
            {
                get { return _connectionstring; }
                set { _connectionstring = value; }
            }
        }
    }类库文件: BuildFile.CSnamespace CX.PPP
    {
        public class FileBuilder : Init
        {
            public bool WriteFile(Int32 ArticleID, bool IsOverwrite)
            {
                这里引用另一个方法:Articles,在下一个文件里
        Articles.Get(123456);
        过程略
            }
    }namespace CX.PPP.DS
    {
        public class Articles : Init
        {
            #region fields
            ....略去
            #endregion
            #region property
            public Int32 ArticleID
            {
                set { _articleid = value; }
                get { return _articleid; }
            }
    ...其他略去
            #endregion        /// <summary>
            /// 获取文档内容
            /// </summary>
            /// <param name="articleid"></param>
            public void Get(Int32 articleid)
            {
                if (Init.ConnectionString == null) throw new Exception("数据库连接字符为空");
            }
        }
    }
    ----------------
    以下是Web项目中的引用public FileBuilder _filebuilder = new FileBuilder();
    protected void Page_Load(object sender, EventArgs e)
    {
    _filebuilder.ConnectionString = connectionString;
    _filebuilder.WriteFile(Int32.Parse(Request.QueryString["ArticleID"].ToString()), true);
    }
      

  9.   

    init.cs
    --
    public class init{
            private string _connectionstring;
            public string ConnectionString
            {
                get { return _connectionstring; }
                set { _connectionstring = value; }
            }
    }
    file.cs
    public class file{
      private init myInit = null;
      public init MyInit
      {
        get
        {
          if(myInit == null)
          {
             myInit = new init();
          }
         return myInit;
        }
        set {myInit = value;}   
      }
      public string outputs{
        get{
        return init.ConnectionString;
      }
      }
    }
      

  10.   

    public class file{
      public init = new init();
      public string outputs{
        return init.ConnectionString;
      }
    }
    public file _file = new file();
    在new一个file的时候,他会去new一个init,即是在内存中按照init分配内存空间。
     public init _init = new init();
    这个时候你又去new一个init还会在内存中按照init分配内存空间,但是这个内存空间,与先前分配的空间,不是同一片区域,所以在
    _init.ConnectionString = "aaaaaaaaaaaaaa";
    给后面的那块空间里赋值了,而没有对前面的那块空间设置值,
    而Response.Write(_file.outputs());是取出的前面那块空间里面的值,所以为空。
    可以写
    _file.init.ConnectionString="aaaaaaaaaaaaaa"。
        
      

  11.   

    请看看我后面写得详细一点的。谢谢类库文件: Init.cs
    ---------
    namespace CX.PPP
    {
        public class Init : IRequiresSessionState
        {
            private string _connectionstring;        public string ConnectionString
            {
                get { return _connectionstring; }
                set { _connectionstring = value; }
            }
        }
    }类库文件: BuildFile.CSnamespace CX.PPP
    {
        public class FileBuilder : Init
        {
            public bool WriteFile(Int32 ArticleID, bool IsOverwrite)
            {
                这里引用另一个方法:Articles,在下一个文件里
        Articles.Get(123456);
        过程略
            }
    }namespace CX.PPP.DS
    {
        public class Articles : Init
        {
            #region fields
            ....略去
            #endregion
            #region property
            public Int32 ArticleID
            {
                set { _articleid = value; }
                get { return _articleid; }
            }
    ...其他略去
            #endregion        /// <summary>
            /// 获取文档内容
            /// </summary>
            /// <param name="articleid"></param>
            public void Get(Int32 articleid)
            {
                if (Init.ConnectionString == null) throw new Exception("数据库连接字符为空");
            }
        }
    }
    ----------------
    以下是Web项目中的引用public FileBuilder _filebuilder = new FileBuilder();
    protected void Page_Load(object sender, EventArgs e)
    {
    _filebuilder.ConnectionString = connectionString;
    _filebuilder.WriteFile(Int32.Parse(Request.QueryString["ArticleID"].ToString()), true);
    }
      

  12.   

    呵呵,lz对类的概念有些模糊.
            public void Get(Int32 articleid)
            {
                if (Init.ConnectionString == null) throw new Exception("数据库连接字符为空");
            }
    中Init.ConnectionString 是不能这样用的.如果想这样写可以将类Init 中的成员_connectionstring写成protected的.
    然后
            public void Get(Int32 articleid)
            {
                if (_connectionstring== null) throw new Exception("数据库连接字符为空");
            }---------------------------------------------------------
            public bool WriteFile(Int32 ArticleID, bool IsOverwrite)
            {
                这里引用另一个方法:Articles,在下一个文件里
        Articles.Get(123456);
        过程略
            }
    中Articles.Get(123456)也不能这样用.因为Articles是类,而Get是非静态方法.
    ------------------------------------------------------
    再来看一下你的类关系:Init<-FileBuilder,Init<-Articles 
    -------------------------------------------------------
    使用:
    public FileBuilder _filebuilder = new FileBuilder();
    protected void Page_Load(object sender, EventArgs e)
    {
    _filebuilder.ConnectionString = connectionString;
    _filebuilder.WriteFile(Int32.Parse(Request.QueryString["ArticleID"].ToString()), true);
    }
    这里你只设置了对象_filebuilder 的ConnectionString 属性
    而在 _filebuilder.WriteFile()方法的调用中却使用的是类Articles 的属性.(这里假设了你的程序能够通过编译)  所以会报异常.
    ---------------------------------------------------------
    我的看法:
    为应用程序设置唯一连接可以使用静态类.这里给出一个启发的例子:
        public class ConnectionService
        {
            private static ConnectionService cs = new ConnectionService();        private ConnectionService()
            {
                string connectionString = "";
                connection = new OleDbConnection(connectionString);
            }        public static OleDbConnection Connection
            {
                get
                {
                    return cs.connection;
                }
            }
        }
    -------------------------------------------------
    呵呵,不知道以上楼主看明白没有,有错误的地方请指出.
      

  13.   

    简单问题复杂化了,
     public init _init = new init();//init类实例化
     public file _file = new file();//隐含:在file类里面对init类实例化
    ....
    一看就知道,完全是一个init类的两个不同的新实例,
    一个init类实例怎么可能取到另一个init类实例的赋值呢?
    要想达到这样的目的除非init是静态的,或者象 litaoye说的一样:
    _file.init.ConnectionString = "aaaaaaaaaaaaaa";//直接给file类里面init类的实例的属性赋值
    或者:
    _init.ConnectionString = "aaaaaaaaaaaaaa";
    _file.init = _init;//初始化_file.init为init类的另一个实例_init,那么就可以取得_init的属性值了。
      
     
      

  14.   

    initd 类在 file 类中已建立一个PUBLIC的对象init,而且对象init做为FILE的一个数据,即可以利用
    file.init.ConnectionString = "aaaaaaaaaaaaaa"来调用即可.
    或者
    _init.ConnectionString = "aaaaaaaaaaaaaa";
    _file.init = _init 也是一样的
    象楼主说的那样,那只是两个独立的类,只是各自对自己的数据成员或属性给值,两都并没有实质的联系,除非你在FILE类中对INIT的对象也赋值才行.
      

  15.   

    file.cs
    public class file{
       public file()
       {
           public init = new init();
           }
    public string outputs{
        return init.ConnectionString;
      }
    }
      

  16.   

    改为以上看看,应为你取outputs的时候init 没有实列化
      

  17.   

    呵呵,lostowner() 的方法肯定不行,说到底还是一个类的两个新实例的问题散。
    我猜测楼主的意思估计是不管在哪里,都要可以直接访问init的ConnectionString属性来获取连接SQL的字符串是吗?如果是这样,将那个ConnectionString定义为静态的就可以了。如下:
    public class init
    {
       private static string _connectionstring;
       public static string ConnectionString
       {
          get { return _connectionstring; }
          set { _connectionstring = value; }
        }
    }
    //在其他任何地方给静态属性赋值(建议在系统运行的时候进行赋值):
     init.ConnectionString="aaaaaaaaa";
    //静态的属性或方法值可以直接访问获取,不需要对init进行实例化
    string sqlLink=init.ConnectionString;
    //注意:上面可以直接访问的前提是所有代码(类)都是在同一个工程项目里面。
      

  18.   

    我的意思是不管在哪里,设置init的ConnectionString属性来初始化连接SQL的字符串上面提到的类都是在一个工程里,在Web项目中引用这个类库。这篇贴子里有朋友提出了些解决方案,我还不是很明白。http://community.csdn.net/Expert/topic/5212/5212352.xml?temp=.1744501
      

  19.   

    引用时:abc.aspx    public init _init = new init();
        public file _file = new file();...._init.ConnectionString = "aaaaaaaaaaaaaa";
    Response.Write(_file.outputs());返回为空,为何???中间回复的没看,但是public init _init = new init();的_init并非_file里面的_init (public file _file = new file();)所以后面你虽然对_init赋值了,但是对于_file这个对象来说,它内部的_init仍然没有赋值.如果你想达到输入"aaaa...",你需要将_file里面的_init赋值.即:
    _file._init.ConnectionString = "aaaaaaaaaaaaaa";
    然后再输出.这是面向对象的概念模糊造成的.也就是说此_init非彼_init
      

  20.   

    楼上的朋友,都给出了了自己的代码,我就不写代码了
    我想在这里我认为有问题的地方说一下:
    楼主这里对对象明显的是认识不够,一个类可以有很多个对象,不同的对象之间
    肯定也是有区别的,楼主在file.cs中创建了一个init.cs的对象,并且返回了
    ConnectionString,这肯定是空的,原因是你就没有赋值。
    另外:
    abc.aspx
        public init _init = new init();
        public file _file = new file();
    ....
    _init.ConnectionString = "aaaaaaaaaaaaaa";
    Response.Write(_file.outputs());
    这里是创建了一个init类的另外一个对象,并且赋值了,这个时候直接
    输出_init.ConnectionString肯定是有值的。
    但是这样_file.outputs()调用还是会是空的。
    其实你无论怎么调用_file.outputs()都是空的,原因就是你在调用之前总是
    新建了一个init对象,这个对象的ConnectionString是没有赋值的。类file.cs也有错误:
    public class file{
      public init = new init();
      public string outputs{
        return init.ConnectionString;
      }
    }
    应该是:
    public class file{
      public init int = new init();
      public string outputs{
        return init.ConnectionString;
      }
    }
      

  21.   

    接上:
    应该是:
    public class file{
      public init init1 = new init();
      public string outputs{
        return init1.ConnectionString;
      }
    }正确的调用方法:
    abc.aspx
        public init _init = new init();
        public file _file = new file();
    ....
    _file.init1.ConnectionString = "aaaaaaaaaaaaaa";
    Response.Write(_file.outputs());
    这就ok了
      

  22.   

    對象和對象實例之間的關係沒有搞清楚。file是一個類,init 是一個類,
    _file 是file的實例,_init 是init的實例。file中引用了init的一個實例,但你要確定你定義的_init這個實例是不是你定義的_file中引用的那個init類的實例。