写了一个类库
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());返回为空,为何???
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());返回为空,为何???
解决方案 »
- c#里,一段代码的前面加了个[],是干什么用的?
- C# Textbox在获取焦点时如何显示说明
- 请问怎么用增删改查运用到C#中
- socket接收到的文件,没有内容
- C#请教一个关于存储的问题高手请进
- 一道提考考大家(C#)
- datagridview中checkbox的选中问题
- 问一个关于标记datagrid的单元格颜色的问题
- 文本框得到焦点的事件该怎么写?
- 怎样使用al将资源文件链接或嵌入到程序集中?
- ExtFloodFill(hdc0, x, y, color.ToArgb(),FLOODFILLSURFACE=1);無法執行,要如何使用此函數
- 请问一下哪位高手可以帮我处理一下这样一条循环呢??
不然,你从未对_file.init.ConnectionString赋值,当然是空
_file.init = _init;
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
public file _file = new file();你的_file又不是_init的成员函数,当然返回空了...
其他一些方法在不同的类下面。用的时候方便一点。每次只要使用INIT类设置一些基本参数,其他方法就直接用。我不大会描述,大家不要见笑。
---------
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);
}
--
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;
}
}
}
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"。
---------
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);
}
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;
}
}
}
-------------------------------------------------
呵呵,不知道以上楼主看明白没有,有错误的地方请指出.
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的属性值了。
file.init.ConnectionString = "aaaaaaaaaaaaaa"来调用即可.
或者
_init.ConnectionString = "aaaaaaaaaaaaaa";
_file.init = _init 也是一样的
象楼主说的那样,那只是两个独立的类,只是各自对自己的数据成员或属性给值,两都并没有实质的联系,除非你在FILE类中对INIT的对象也赋值才行.
public class file{
public file()
{
public init = new init();
}
public string outputs{
return init.ConnectionString;
}
}
我猜测楼主的意思估计是不管在哪里,都要可以直接访问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;
//注意:上面可以直接访问的前提是所有代码(类)都是在同一个工程项目里面。
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
我想在这里我认为有问题的地方说一下:
楼主这里对对象明显的是认识不够,一个类可以有很多个对象,不同的对象之间
肯定也是有区别的,楼主在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;
}
}
应该是:
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了
_file 是file的實例,_init 是init的實例。file中引用了init的一個實例,但你要確定你定義的_init這個實例是不是你定義的_file中引用的那個init類的實例。