标题可能不清楚,但请看下面的模式
public abstract class Animal
{
public abstract Dog GetDog { get; }
public abstract Cat GetCat { get; }
}
public class Dog : Animal
{
public override Dog GetDog {
get { return this; }
}
public override Cat GetCat {
get { return null; }
}
}
Run Code Online (Sandbox Code Playgroud)
这被认为是在基类中具有属性,返回派生类型的不良做法.或者我应该做些什么
public abstract AnimalTypeEnum AnimalType { get; }
Run Code Online (Sandbox Code Playgroud)
编辑:根据评论,我想我应该更清楚我想要实现的目标.该类Dog或Cat类的新实例将由基于特定条件的单独函数创建,然后将Animal类型返回给调用者.调用方法将检查返回实例的类型并相应地使用它.
public Animal CreateAnimal(string path)
{
//Process the document in path and create either a new …Run Code Online (Sandbox Code Playgroud) 我读到,如果可以估计大小,则用初始容量初始化字典可能会带来更好的性能。
Dim MyDataTable As New DataTable
'Fill MyDataTable from Database
Dim CapacityEstimate As integer = MyDataTable.Rows.Count
Dim MyDictionary As New Dictionary(Of String, MyObjectType)(CapacityEstimate)
'Fill the Dictionary independent of data table
Run Code Online (Sandbox Code Playgroud)
CapacityEstimate 变量只是字典应保存的键/值对数量的估计(通常在 2500 到 7000 范围内)。因此,如果我估计它是 4000 个对象,最终有 4010 个对象(我可能会超过或低于,不确定),字典会使用大量内存来调整其中已有的许多键/值对的大小。这是一个好的解决方案还是我最好不要用初始容量初始化它。谢谢。
编辑:相关但不相同 - .NET 通用字典是否应该使用等于它将包含的项目数的容量进行初始化?
我有一个类结构如下
public class Logger
{
StremWriter sw;
public Logger()
{
sw = new streamwriter(tempPath);
}
public StreamWriter StreamLog
{
get { return sw; }
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如果我尝试StreamWriter从两个不同的线程访问对象,如何正确锁定.下面显示的锁定是否可以接受?或者我应该StreamWriter直接锁定
//Log is an instance of Logger that could be accessed from multiple threads
lock (Log) {
Log.StreamLog.WriteLine("temp");
}
Run Code Online (Sandbox Code Playgroud)
编辑:这些日志对象将进入ConcurrentQueue不同线程可以检索它们的位置