小编swi*_*tgp的帖子

从基类返回派生类实例

标题可能不清楚,但请看下面的模式

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)

编辑:根据评论,我想我应该更清楚我想要实现的目标.该类DogCat类的新实例将由基于特定条件的单独函数创建,然后将Animal类型返回给调用者.调用方法将检查返回实例的类型并相应地使用它.

public Animal CreateAnimal(string path)
{

    //Process the document in path and create either a new …
Run Code Online (Sandbox Code Playgroud)

c# inheritance

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

具有初始容量的字典

我读到,如果可以估计大小,则用初始容量初始化字典可能会带来更好的性能。

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 通用字典是否应该使用等于它将包含的项目数的容量进行初始化?

.net vb.net

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

锁定一个对象

我有一个类结构如下

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不同线程可以检索它们的位置

.net c# multithreading

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

标签 统计

.net ×2

c# ×2

inheritance ×1

multithreading ×1

vb.net ×1