小编Sam*_*Sam的帖子

C#继承.来自Base类的派生类

我有一个基类

public class A   
{
    public string s1;
    public string s2;
}
Run Code Online (Sandbox Code Playgroud)

我也有一个派生类:

public class B : A
{
    public string s3;
}
Run Code Online (Sandbox Code Playgroud)

假设我的程序创建了A类的实例.

A aClassInstance = new A();
Run Code Online (Sandbox Code Playgroud)

设置了一些参数:

aClassInstance.s1 = "string 1";
aClassInstance.s2 = "string 2";
Run Code Online (Sandbox Code Playgroud)

此时我想创建一个B类实例.但我希望B已经拥有了我的A类实例的值.

这不行:

public B bClassInstance = new B():
bClassInstance = (B)aClassInstance;
Run Code Online (Sandbox Code Playgroud)

没有这个:

在A类中制作克隆方法

public B cloneA() {    
    A a = new A();
    a = (A)this.MemberwiseClone()
    return(B)a;
}
Run Code Online (Sandbox Code Playgroud)

VS代码采用上述两种方法 - 但我得到了运行时错误

请帮忙

c# polymorphism inheritance

16
推荐指数
2
解决办法
2万
查看次数

Visual Studio设置不卸载以前版本的版本

我需要不断发布一个新的可执行文件,并进行修改以发送给最终用户.设置项目属性设置为

RemovePreviousVersion = True
DetectNewerInstalledVersion = True
Run Code Online (Sandbox Code Playgroud)

当我发布新版本时,我会增加版本并更改产品代码.

(由于我使用的是Visual Studio 2010 - 当您增加版本时,它会自动更改产品代码,但我也尝试手动更改它).

构建完成后 - 以前的版本不会卸载.

设置如下:

在visual studio 2010 ultimate中设置项目属性

编辑:经过一些研究后,我发现项目的fileVersion也需要增加.我在AssemblyInfo.cs中这样做了

[assembly: AssemblyVersion("0.0.0.2")]
[assembly: AssemblyFileVersion("0.0.0.2")]
Run Code Online (Sandbox Code Playgroud)

两个版本都是0.0.0.1.重建后 - 同样的问题.

有关如何使这项工作的任何想法?

setup-project visual-studio-2010

9
推荐指数
1
解决办法
4878
查看次数

如何在c#中有效地从SQL datareader写入文件?

我在C#中有一个远程sql连接,需要执行查询并将其结果保存到用户的本地硬盘.这个东西可以返回相当大量的数据,因此需要考虑一种有效的存储方式.我之前已经读过,先将整个结果放入记忆中,然后写出来并不是一个好主意,所以如果有人可以提供帮助,那就太好了!

我目前正在将sql结果数据存储到DataTable中,虽然我认为它可以更好地做一些事情while(myReader.Read(){...} 下面是得到结果的代码:

          DataTable t = new DataTable();
            string myQuery = QueryLoader.ReadQueryFromFileWithBdateEdate(@"Resources\qrs\qryssysblo.q", newdate, newdate);
            using (SqlDataAdapter a = new SqlDataAdapter(myQuery, sqlconn.myConnection))
            {
                a.Fill(t);
            }

            var result = string.Empty;
    for(int i = 0; i < t.Rows.Count; i++)
    {
        for (int j = 0; j < t.Columns.Count; j++)
        {
            result += t.Rows[i][j] + ",";
        }


        result += "\r\n";
    }
Run Code Online (Sandbox Code Playgroud)

所以现在我有了这个巨大的结果字符串.我有数据表.必须有一个更好的方法吗?

谢谢.

c# sqldatareader writetofile

8
推荐指数
2
解决办法
4万
查看次数

如何检查线程是否在C#中忙?

我有一个在线程上运行的Windows窗体UI Thread1.我有另一个线程,Thread2通过需要更新Windows UI的外部事件获取大量数据.(它实际上更新了多个UI线程.)

我有第三个线程,Thread3我用作之间的缓冲线程Thread1,Thread2因此Thread2可以继续更新其他线程(通过相同的方法).

我的缓冲线程Thread3看起来像这样:

public class ThreadBuffer
{
    public ThreadBuffer(frmUI form, CustomArgs e)
    {
        form.Invoke((MethodInvoker)delegate { form.UpdateUI(e); });
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是ThreadBuffer检查我的表单当前是否正在忙于执行以前的更新.如果是的话,我希望它等到它释放然后再调用它UpdateUI(e).

我在考虑:

一个)

//PseudoCode

while(form==busy)
{
    // Do nothing;
}
form.Invoke((MethodInvoker)delegate { form.UpdateUI(e); });
Run Code Online (Sandbox Code Playgroud)

我该form==busy怎么检查?另外,我不确定这是一个好方法.

b)在form1中创建一个事件,通知ThreadBuffer它已准备好处理.

// psuedocode

List<CustomArgs> elist = new List<CustomArgs>();

public ThreadBuffer(frmUI form, CustomArgs e)
{
    from.OnFreedUp += from_OnFreedUp();
    elist.Add(e);
}

private form_OnFreedUp()
{
    if …
Run Code Online (Sandbox Code Playgroud)

c# multithreading winforms

5
推荐指数
1
解决办法
2231
查看次数

编写C#(.NET)或PERL文件的速度更快?

我们有很多旧的遗留Perl脚本,它们连接到MS SQL db进程的一些记录和make文件.随着时间的推移,每日交易规模增加,这些脚本变得越来越昂贵.

此外,数据库随着越来越多的表而增长,修改旧的Perl脚本非常麻烦.正在考虑重做.NET下的一些主要脚本(在C#中)

在运行Windows Server的机器上使用一个与另一个相比,是否有速度优势?

这个想法再一次

  1. 执行查询

  2. 通过一些基本格式处理结果

  3. 将结果写入文件

.net c# perl performance file-writing

4
推荐指数
1
解决办法
894
查看次数

是否可以将Perl安装的软件包列表传输到另一台机器,并在ActiveState中标记安装

所以我们正在迁移服务器.Arghh.一台机器上有很多Perl的东西,我们需要在另一台机器上设置.

有没有办法导出/导入已安装的所有软件包的列表,以便我可以在新服务器上安装它们而不是逐个查找?(使用Active Perl)

谢谢.

perl activestate package-managers

3
推荐指数
1
解决办法
1752
查看次数

c#中的两个if语句有区别吗?

有什么区别:

 if (myObject != null && myObject.someint == 0)
 {
      // do something
 }
Run Code Online (Sandbox Code Playgroud)

if (myObject != null)
{
    if (myObject.someint == 0)
    {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直认为它会评估第一个条件,如果为false,它会跳过第二个条件的评估.但是我在null-reference的运行时遇到错误.myObject是空的,它试图检查myObject.someint

该对象可以在外部进行修改,是否检查了对象存在的第一个条件,但是当它进入下一个条件时,有什么东西杀死了myObject中的引用?

如果是后者,任何避免的方法(在我看来,上述两种方式都做了if检查都是一样的).只有我可以想象的是try/catch

c# if-statement

2
推荐指数
1
解决办法
130
查看次数