我为什么不能投出List<ObjBase>的List<Obj>?为什么以下不起作用:
internal class ObjBase
{
}
internal class Obj : ObjBase
{
}
internal class ObjManager
{
internal List<Obj> returnStuff()
{
return getSomeStuff() as List<Obj>;
}
private List<ObjBase> getSomeStuff()
{
return new List<ObjBase>();
}
}
Run Code Online (Sandbox Code Playgroud)
相反,我必须这样做:
internal class ObjBase
{
}
internal class Obj : ObjBase
{
}
internal class ObjManager
{
internal List<Obj> returnStuff()
{
List<ObjBase> returnedList = getSomeStuff();
List<Obj> listToReturn = new List<Obj>(returnedList.Count);
foreach (ObjBase currentBaseObject in returnedList)
{
listToReturn.Add(currentBaseObject as Obj);
}
return …Run Code Online (Sandbox Code Playgroud) 如果我使用私有默认构造函数和具有参数的公共构造函数定义类,如何访问私有构造函数?
public class Bob
{
public String Surname { get; set; }
private Bob()
{ }
public Bob(string surname)
{
Surname = surname;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过类上的静态方法访问私有构造函数,如下所示:
public static Bob GetBob()
{
return new Bob();
}
Run Code Online (Sandbox Code Playgroud)
我认为我可以通过扩展方法访问私有构造函数,因为(根据我的理解)扩展方法被翻译,以便它们看起来是类上的静态方法,但我不能:
static class Fred
{
public static Bob Bobby(this Bob bob)
{
return new Bob();
}
}
Run Code Online (Sandbox Code Playgroud)
那么,我如何访问私有构造函数?
谢谢
我想这样做的原因是我想为我们的某个业务类创建测试,但不允许此类的使用者能够错误地实例化对象.我正在测试它,所以我知道(我希望!)在什么情况下测试会失败.我现在还在测试n00b,所以我的想法可能是也可能不是做事的"错误方式".
我已经改变了我的测试策略,就像这个类的消费者那样做事,即调用公共方法,如果公共方法没问题,假设私有方法没问题.我仍倾向于测试私有方法,但我的老板是呼吸了我的脖子上交付:-(
代码:
public Constructor(string vConnection_String)
{
try
{
mConnection_String = vConnection_String;
}
catch (Exception ex)
{
ExceptionHandler.CatchEx(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为编程这个的人"只是小心点",但是出于兴趣,可以在这样的字符串赋值行上抛出什么异常?我可以想到System.OutOfMemoryException,但其他人呢?
谢谢
昨天和今天我一直在阅读的一些内容:
这些差异非常微妙,但它们确实会影响系统在经过多年微妙变化,新功能,增强功能等后的弹性.大多数开发人员不喜欢系统维护,我觉得最大的原因是因为系统并非真正设计为保持.通过结合上面的"单例"模式,我抽象了对象的创建和打字,远离我的核心业务逻辑,这对于长期维护至关重要.
要求消费者无缘无故地创建一个类实例; 对静态方法没有任何风险的真实实用程序类是静态方法的优秀案例 - 以System.Convert为例.如果您的项目是一次性的,对未来的维护没有要求,那么整体架构确实不是很重要 - 静态或非静态,并不重要 - 然而,开发速度确实如此.
我们(我)正忙着重写我们的主要应用程序,解决方案中的一个项目是"Common",它包含一个类"clsCommon".这个类没有属性,一个私有方法被称为构造函数中的唯一行,然后只是公共方法.
这个类处理的事情(不是真正的方法名称或签名):
目前,解决方案中的所有其他项目都引用了该项目,并通过以下方式提供对该类的访问:
namespace Us.OtherProjects
{
public class clsCommon : Us.Common.clsCommon
{}
}
namespace Us.OtherProjects
{
public static class clsMain
{
public static clsCommon CommonClsClassReferenceForGlobalUsage = new clsCommon();
. …Run Code Online (Sandbox Code Playgroud) 自定义编译器警告和
C#:如果源代码中使用某些方法,则在Visual Studio中创建自定义警告,
因为它们处理作者控制下的代码.
我们在我们的软件中使用第三方UI控件套件(DevExpress),我想在有人使用时生成警告MessageBox.Show("blah");而不是XtraMessageBox.Show("blah");
有没有办法做到这一点?
c# ×4
.net ×2
casting ×1
class ×1
constructor ×1
exception ×1
generics ×1
inheritance ×1
instance ×1
list ×1
static ×1
string ×1
visibility ×1
warnings ×1