小编Kyl*_*ran的帖子

在 .NET 3.5 中生成带有反射的子类列表

在运行时,我想指定一个父类,然后程序将生成所有子类(无论几代)的列表。例如,如果我有Entity一个父级 and 和Item:Entityand Actor:Entity,就会有两个字符串,“Actor”和“Item”。

我明白这System.Reflection.TypeInfo正是我正在寻找的。但是,这似乎是 .NET 4.5 独有的,不幸的是我的环境停留在 3.5。

在 .NET 3.5 中是否有其他方法可以做到这一点,还是应该考虑升级?

c# reflection .net-3.5

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

什么时候应该提供接口的通用和非通用版本?

我了解对象的深层克隆和浅层克隆之间的区别,但是根据西蒙对这个问题的回答(复制构造函数对克隆),应该提供通用和非通用版本。为什么?

您可以定义两个接口,一个具有通用参数以支持强类型克隆,而一个接口则不具有弱类型克隆功能,以供您处理不同类型的可复制对象的集合时使用:

我的意思是小事足以让不同的接口,但在现代的C#泛型重的范例,我发现来很难了一个正当的理由,为什么你会永远想使用非通用和弱类型版本。哎呀,你甚至可以T:object做同样的事情!

我会这样写我的接口:

public interface IShallowCloneable
{
    object Clone();
}

public interface IShallowCloneable<T> // Should this derive IShallowCloneable?
{
    T Clone();
}

public interface IDeepCloneable
{
    object Clone();
}

public interface IDeepCloneable<T> // Should this derive IDeepCloneable?
{
    T Clone();
}
Run Code Online (Sandbox Code Playgroud)

我的班级会像这样实现它:

public class FooClass : IDeepCloneable<FooClass>
{
    // Implementation
}
Run Code Online (Sandbox Code Playgroud)

c# generics clone interface

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

使方法按值返回对象?

我有一个字典,这样: Dictionary<string, SomeClass> template

基本上,我想要做的是获取包含在其中的对象的副本template.但是,我似乎无法创建一个按值检索对象的方法.我知道refout,但这些与我想要的完全相反.结构将是完美的,但不幸的是,SomeClass必须从另一个类和/或接口继承.

有什么办法可以做我想要的吗?这看起来应该非常简单.

c# methods return-by-value

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

使用字节将"256"作为参数传递的解决方法

我正在创建一个包含私有数组的类,我用它来缓存计算值.我想将元素数量限制为最多256个,因为这是使用byte索引的索引器可以访问的元素的最大数量; 我还需要数字相当小,所以这是有效的.

然而!它必须作为构造函数中的参数传递,因为客户端代码将确定它有多大.但是,如果我以a byte为参数,最大值为255; 我理解为什么以及如何,但我无法找出最好的解决方法.

public class Spritesheet
{
    private Rectangle[] _values;
    public Spritesheet(byte spriteCount)
    {
        _values = new Rectangle[spriteCount]; // But this needs to store 256 values at most...
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以把它变成一个字节?如果它是null,则使用256个元素,但这似乎是任意的(虽然它肯定会起作用).我可以看到的另一个替代方法是使用int并以某种方式限制值,但是将其暴露为int可能会给用户错误的代码意图.

编辑:将"spritesToIndex"更改为"spriteCount"以使其更清晰.对于它的价值,这是我正在实现的界面:

public interface ISpritesheet
{
    Texture2D Texture { get; }

    byte Sprites { get; }
    byte SpritesPerRow { get; }

    Point Size { get; }
    Point Spacing { get; }
    Point Offset { get; }

    Rectangle this[byte …
Run Code Online (Sandbox Code Playgroud)

c# arrays byte

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