这可能是一个很好的观点,但它涉及编译器在您执行以下操作时发出的警告:
class A
{
public virtual void F() { }
}
class B : A
{
public void F() { }
}
Run Code Online (Sandbox Code Playgroud)
然后你得到警告:
'EomApp1.B.F()' hides inherited member 'EomApp1.A.F()'.
To make the current member override that implementation, add the override keyword. Otherwise use the new keyword.

问题:如果我什么都不做的话,警告我会发生什么警告?如果我添加'new'关键字,那么我的程序功能是否会有所不同?
(注意:我知道我可以很容易地测试这个,但我觉得这里值得问一下)
我习惯于创建我自己的工厂(如图所示):
public class ElementFactory
{
public IElement Create(IHtml dom)
{
switch (dom.ElementType)
{
case "table":
return new TableElement(dom);
case "div":
return new DivElement(dom);
case "span":
return new SpanElement(dom);
}
return new PassthroughElement(dom);
}
}
Run Code Online (Sandbox Code Playgroud)
我终于开始在我当前的项目中使用IoC容器(AutoFac)了,我想知道是否有一些使用AutoFac优雅地实现同样功能的神奇方法?
我有以下测试,有支持类,但我无法弄清楚如何验证对依赖项的调用.
[TestFixture]
public class AnonymousGenericTypeParameterTests
{
[Test]
public void Test()
{
// Arrange
var dependency = new Mock<IDependency>();
var towns = new List<Town>
{
new Town { Name = "Lifford", County = "Donegal", Country="Ireland", Population = 1658 },
new Town { Name = "Ballyshannon", County = "Donegal", Country="Ireland", Population = 2504 },
new Town { Name = "Buxton", County = "Derbyshire", Country="United Kingdom", Population = 13599 },
};
var sut = new MyClass(dependency.Object);
// Act
sut.DoSomething(towns);
// Assert
// The …Run Code Online (Sandbox Code Playgroud) hg heads -t在开始新工作之前,我想检查一些可能需要合并的优秀拓扑头().我没有看到使用revsets在TortoiseHg中做到这一点的方法.我不经常过滤成为一个转换的poweruser,他们吓到我了.
可能吗?
我正在将消息记录到最大为1000个字符的数据库字段中.目前,如果我尝试记录一条消息(通常包含堆栈跟踪,HTTP请求内容等异常信息),大于1000个字符,插入失败,NLog(应该)默默地忽略它并继续前进.
我可以在NLog.config中添加一些东西来声明消息长度应该总是被截断,所以它不超过1000个字符吗?
如果你能告诉我如何通过用"[...截断]"之类的东西替换1000个字符限制之前的最后几个字符来优雅地标记截断的消息,则可以获得奖励积分.
不敢相信我用谷歌搜索不能轻易找到这个.希望我不必编写自己的渲染器?
当我在测试中运行以下代码时,
Mock<XmlWriter> mockXmlWriter = new Mock<System.Xml.XmlWriter>();
Language language = Language.GetLangauge(langId);
language.WriteXml(mockXmlWriter.Object);
mockXmlWriter.Verify(writer => writer.WriteAttributeString("ID", language.LanguageID.ToString()));
Run Code Online (Sandbox Code Playgroud)
Moq可以理解地抛出以下异常:System.NotSupportedException : Invalid verify on a non-virtual (overridable in VB) member: writer => writer.WriteAttributeString("ID", .language.LanguageID.ToString()).
愚蠢的抽象XmlWriter仍然有一些非抽象的非虚拟方法,如WriteAttributeString():(
我寻找一个XmlWriterBase或一个System.Xml.Abstractions,就像我HttpContext和公司一样,但没有发现任何东西:(
我如何克服这一点,以便我可以测试我的WriteXml方法正在做它应该做的事情?
在全新安装带有 IIS 7 的 Windows Server 2008 R2 时,它会在C:\inetpub\wwwroot. 我确信对于存储网站文件的好地方有很多主观意见,但我想知道除了默认网站之外,如果我要创建第二个网站,IIS 开发人员打算将其放在哪里?
我在想C:\inetpub\mysecondsite,但我不能肯定地说。
我的情况类似于Fluent NHibernate Mapping中描述的情况,而不是PK Field
但是,我的表之间的关系由多个非主键列描述.想象一下克里斯·米克的情况,但是Person有一个JobType和一个Code一起应该(对不起,它是一个遗留数据库)唯一描述一个Person
Person
------
Id PK
JobType
Code
Name
Order
-----
Id PK
Person_JobType
Person_Code
OrderDetails
Run Code Online (Sandbox Code Playgroud)
SerhatÖzgel的回答描述了使用PropertyRef,但我无法找到一种方法来单独为多列做到这一点.我尝试过类似的
class PersonMap : ClassMap<Person>
{
public PersonMap()
{
HasMany(p => p.Order)
.KeyColumns.Add("Person_JobType")
.PropertyRef("JobType")
.KeyColumns.Add("Person_Code")
.PropertyRef("Code")
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这显然是行不通的,因为KeyColumns.Add()返回另一个OneToManyPart所以PropertyRef()添加未对个人柱.第二个PropertyRef()只是覆盖第一个,我得到以下错误:
NHibernate.MappingException : collection foreign key mapping
has wrong number of columns: MyApp.Person.Order type: Int32
Run Code Online (Sandbox Code Playgroud)
我查看了KeyColumns.Add()的各种重载,
public TParent Add(string …Run Code Online (Sandbox Code Playgroud) 从这个问题延伸,我试图将包含复杂对象集合的复杂对象传递给ASP.NET Web API控制器操作方法,但是我无法找到用于输入对象的正确格式.请求.继续克里斯托弗约翰逊的问题的例子(并删除一些字段为简单),如果我改变他的PhoneRequest对象包含一组电话号码...
public class PhoneRequest
{
public string[] PhoneNumbers { get; set; }
public string State { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
...我将参数作为URL编码的查询字符串传递:
/api/phonenumber?id[0][State]=UT&id[0][PhoneNumbers][0]=555-1234567
Run Code Online (Sandbox Code Playgroud)
...或者POST它作为html表单编码(Content-Type: application/x-www-form-urlencoded)请求正文:
[0][State]=UT&[0][PhoneNumbers][0]=555-1234567
Run Code Online (Sandbox Code Playgroud)
......然后一切都很好.但是,如果我PhoneNumbers从一个字符串集合更改为一个新PhoneNumber类型的集合...
public class PhoneRequest
{
public PhoneNumber[] PhoneNumbers { get; set; }
public string State { get; set; }
}
public class PhoneNumber
{
string AreaCode { get; set; }
string Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
......鉴于之前的结果,我在我看来是合乎逻辑的方式传递物体......
id[0][State]=UT&id[0][PhoneNumbers][0][AreaCode]=555&id[0][PhoneNumbers][0][Number]=1234567
Run Code Online (Sandbox Code Playgroud)
...或者再次作为一个html形式的帖子...
[0][State]=UT&[0][PhoneNumbers][0][AreaCode]=555&[0][PhoneNumbers][0][Number]=1234567 …Run Code Online (Sandbox Code Playgroud)