小编Lea*_*ner的帖子

使用"使用"时出现意外行为

我可以使用用户定义的类型,比如使用块内的类吗?我用的时候:

  1. 它说,我需要继承IDisposable并实现Dispose方法.我继承并尝试定义Dispose方法,我做不到.它告诉我它不公开或某事:(请帮助我理解这一点,我可以用一个小代码来实现它.

  2. 如果我在"使用"括号内创建一个类的实例,虽然这个变量的范围只在那个使用块中,为什么我不能在使用之外用同一个变量创建同一个类的另一个实例?我认为没有充分的理由:(我的推理是否正确?但我可以使用相同的变量来实例化使用之外的另一个类(可以吗?我看到没有编译错误),虽然我很清楚我们应该练习编码指南(但从概念上讲,我在寻求逻辑)....

请帮忙,我是C#的新手

.net c# asp.net

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

C#中的依赖注入

我正在从这个源学习构造函数注入https://softwareengineering.stackexchange.com/questions/177649/what-is-constructor-injection

我很高兴能够理解它.但是,我对构造函数中的接口和类以及接口注入有一个基本的疑问.

具体来说,我无法理解如何在不创建第一个片段中的对象Sword的情况下注入接口.

class Samurai
{
    readonly IWeapon weapon;
    public Samurai() 
    {
        this.weapon = new Sword();
    }
    public void Attack(string target) 
    {
        this.weapon.Hit(target);
    }
}
Run Code Online (Sandbox Code Playgroud)

在下面的代码片段中,他们声称它与上面的代码完全相同,但是松耦合.

class Samurai
{
    readonly IWeapon weapon;
    public Samurai(IWeapon weapon) 
    {
        this.weapon = weapon;
    }
    public void Attack(string target) 
    {
        this.weapon.Hit(target);
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解为什么我们不在"new"第二个片段中使用关键字创建Sword的对象以及它如何在没有它的情况下运行?以上两个片段是否相同?而且,这又如何失去耦合?

.net c# design-patterns c#-4.0

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

如何从临时表插入到表中?

我的临时表中已有值,我想将其插入到我的表中。

我遵循这个语法

IF NOT EXISTS (SELECT 1 FROM ABC abc JOIN #Temp t ON abc.ID = t.ID)

insert into MyTable(Id,Name)
select values (t.ID, t.Name)
From t
Run Code Online (Sandbox Code Playgroud)

我只有名称 t 作为我在插入之前在条件中创建的别名。

它是否正确?有些人使用@等。我很困惑。

sql sql-server temp-tables sql-server-2008

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

当使用"使用"时,我们有任何情况包括我们处理对象的catch块而不执行任何其他操作

在我学习的过程中,我偶然发现了这段代码.我在这里找到一个观察,即使作者正在使用"使用"块并创建"ts"对象,他在使用块内部使用try catch块,在catch部分中,他将对象"ts"显式调用Dispose方法.我觉得没必要.我不明白为什么他需要尝试并抓住这里,如果他必须"只处理对象".

我的问题:

  1. 我们真的需要尝试抓住这里吗?在什么情况下,它将在这个例子中起作用?

  2. 使用"使用"块时,这种方式是否正确?它在GC过程中如何反应?它的开销对吗?

感谢两个问题是否可以以初学者可以理解的方式解释.

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    try
    {
        ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
        obj.UpdateData();
        ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
        obj1.UpdateData();
        ts.Complete();
    }
    catch (Exception ex)
    {
        ts.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# exception-handling using

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

'base'和'this'关键字之间的区别

有人告诉我,可以使用baseor thiskeyword 在派生类中访问基类中的受保护变量.我现在完全糊涂了,因为,this 关键字指的是当前类(派生类).

public class A
{
  protected int i;
}
public class B :A
{
  void Display()
  {
    this.i=10;
    //  (or)
    base.i=10;
  }
}
Run Code Online (Sandbox Code Playgroud)

有什么技术差异吗?首先,今天我很想知道为什么我不能创建A inside Display()方法的对象并通过该对象访问变量i,因为受保护访问的定义说,它可以在任何派生类中访问.伙计们,我看过一些线程,但他们说的是,我们无法创建对象并访问受保护的成员.我觉得,这与定义相反.

有人可以请我解释上述两个问题

.net c#

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

C#Winforms中的文本框验证 - 应该只允许1-100之间的数字

您好抱歉这是一个简单的问题,但如果有人可以指导我的代码,将不胜感激.我在Winform中说了50个文本框.所有应该只允许数字值,也只允许1-100.我该如何确保此验证?

我的想法是在使用Ascii值的keypress事件中使用e.Keychar来限制用户只键入数字.另外,我可以确保在属性中的Set中进行此验证吗?但我不知道我是否正确,也不知道正确的代码.请帮我.

.net c# winforms c#-4.0

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

在C#中使用语句而不实现Dispose方法

我试图理解在C#中使用块.我可以在Using语句中创建一个自定义对象,如下所示,它不实现IDisposable接口吗?

Class A
{
}

using(A a = new A())
{
}
Run Code Online (Sandbox Code Playgroud)

它给出了错误,说"错误1'ConsoleApplication1.A':在using语句中使用的类型必须可以隐式转换为'System.IDisposable'"

如何更正此错误?我不想做A类:IDisposable

还有其他方法吗?或者强制要求我们需要在这些使用块内部使用的自定义对象中实现IDisposable Dispose方法?

编辑:我不期望MSDN和数千个网站中的定义.我只是想了解这个错误以及整改

.net c# using c#-4.0

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

覆盖并在C#中的Base类构造函数中调用相同的方法

我的烦恼是:在下面的代码提交,它应该显示A然后B.但它显示B然后B.为什么会这样?

我的感觉是,A在创建对象时首先执行get的构造函数B.在那种情况下,方法B不会正确吗?所以应该A.Display()而且应该结果A.此外,然后a.Display()应该返回B因为我们有覆盖.

因此,我希望AB.因为它没有超载而是压倒一切.我知道这些东西的定义,我希望了解这种现象的原因以及它是如何工作的内部,因为我不相信有BB,但AB.


class A
{
    public A()
    {
        this.Display();
    }
    public virtual void Display()
    {
        Console.WriteLine("A");
    }
}

class B :A
{
    public override void Display()
    {
        Console.WriteLine("B");
    }
}

class C
{
    static void Main()
    {
        A a = new B();
        a.Display();
        Console.WriteLine();
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出 …

.net c# asp.net c#-4.0

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

如何检查输入的十进制值是否大于十进制列表

我有一个小数列表.我需要查找decimal输入是否大于列表中的任何值.

Decimal threshold = 20;

List<Decimal> InputList = new List<Decimal>() { 10, 20, 35 };
Run Code Online (Sandbox Code Playgroud)

请注意,此输入列表可能在列表中有一个或多个项目.

我想检查其中一项是否大于阈值,然后再做其他事情.

.net c# decimal c#-4.0

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

if存在之间的差异(从中选择1)和(从中选择0)

是否有任何差异在选择1和从中选择0或从中选择任何整数?

我知道select*from是一项昂贵的操作.

但是,选择1不同于选择0来自和或选择29来自?

在仅检查表/存储过程是否存在且是否存在的情况下,删除它并重新创建(在这些场景中)

sql sql-server sql-server-2008

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