Tag: generics

指定generics类,其中T应该是其他类型的子类

这是我想要做的,甚至不确定是否可能.. 我正在创建BaseViewModel ,我希望它接受从Entityinheritance的类型 考虑以下代码: public abstract class BaseViewModel : NotificationObject, INavigationAware { public T MyEntity; public SomeMethod() { MyEntity.SomeEntityProperty = SomeValue; } } 所以,我想说我的Tinheritance自Entity ,因此我知道它会有SomeEntityProperty。 这可能吗?

为什么通用存储库被视为反模式?

在我看来,许多专业的存储库类共享相似的特性,让这些类实现一个概述这些特性的接口是有意义的,创建一个通用的存储库 说明我的观点,说我们有这个代码 public class IEntity { public int Id; } public interface IRepository where T: IEntity { IEnumerable List { get; } void Add(T entity); void Delete(T entity); void Update(T entity); T FindById(int Id); } [Table(“Author”)] public partial class Author : IEntity { public int Id { get; set; } [Required] public string authorname { […]

我应该用通用类定义命名我的文件?

我正在编写几个都有generics类型参数的类,但是我需要重载类,因为在不同的场景中我需要不同数量的参数。 基本上,我有 public class MyGenericClass { … } public class MyGenericClass { … } public class MyGenericClass { … } // it could go on forever, but it won’t… 我希望它们都在同一个命名空间中,但每个类在一个源文件中。 我该怎么命名文件? 有最好的做法吗?

generics,其中T是类实现接口

我有一个界面: interface IProfile { … } ……和一个class级: [Serializable] class Profile : IProfile { private Profile() { … } //private to ensure only xmlserializer creates instances } …和一个方法经理: class ProfileManager { public T Load(string profileName) where T : class, IProfile { using(var stream = new …….) { var ser = new XmlSerializer(typeof(T)); return (T)ser.Deserialize(stream); } } […]

比较代表行动

随意质疑我的理智。 我需要确定Action vs Action是否是原始实例。 我所拥有的是一个带有类变量的类protected Action MessageCallback = null; 当我的abstract class Message是通过抽象方法创建的时候,我强制“他们”初始化MessageCallBack。 此MessageCallback被添加到IList<Action> 。 此列表中定义的每个操作可以不同。 现在,我想要做的是从列表中删除一个特定的操作,但我没有尝试比较它。 以下是我尝试过的最后一次设置的示例: public void Unsubscribe(Action messageCallback) { var messageType = typeof(TMessage); var callbackTypes = messageReceivedCallbacks .Keys .Where(k => k.IsAssignableFrom(messageType)); lock (messageReceivedCallbacks) { foreach (var callbackType in callbackTypes) { messageReceivedCallbacks[callbackType].Remove(new Action(m => messageCallback((TMessage)m))); } } } 我明白我想要做的事情可能是不可能的,但一般来说,我只是做一些不正当的事情,或者缺乏适当的知识,就像我想的那样。 提前感谢您提供的任何帮助。 尝试以下一些方法后更新: 比较他们一直在失败。 以下3项建议都不起作用。 […]

CollectionBase与generics

我正在将应用程序从.NET 1.1迁移到.NET 2.0。 我应该删除CollectionBase的所有用途吗? 如果是这样,迁移的最佳策略是什么?

如何为类型参数约束的generics类型编写扩展方法?

我正在使用特定于任务的.NET平台,它是预编译的而不是OpenSource。 对于某些任务,我需要扩展此类,但不是通过inheritance它。 我只是想添加一个方法。 首先,我想向您展示一个虚拟代码现有类: public class Matrix where T : new() { … public T values[,]; … } 我想以下列方式扩展这个类: public static class MatrixExtension { public static T getCalcResult(this Matrix mat) { T result = 0; … return result; } } 我从许多谷歌链接获得这种语法,所以不知道它是否正确。 编译器告诉我没有错误,但最终它不起作用。 最后,我想以下列方式调用此函数: Matrix m = new Matrix(); … int aNumber = m.getCalcResult(); 所以任何人都有了主意? 谢谢您的帮助! […]

何时在c#中解析generics类型?

根据stackoverflow的这个答案,C#中的generics类型在运行时被解析 。 但是,根据这个答案,在C#中,generics类型在编译时被解析 。 我在这里想念的是什么? 换句话说,在编译时或运行时解析类型T ? 更新: 基于Oded的答案,在这种情况下,类型是封闭的具体类型(这意味着它将在编译时解析) class Program { static void Main() { var t = new Test(); } } public class Test { } 将MSIL具有相当于 class Program { static void Main() { var t = new Test(); } } public class Test { }

new()在`where T:new()?中做了什么

new()在下面的代码中做了什么? public class A where T : B, new()

Func 的List ,使用generics返回类型编译错误,但为什么呢?

这是一个冗长的问题,所以请耐心等待。 我需要在一组字符串和每个字符串的相应generics方法调用之间创建一个映射。 但是,我遇到了编译问题,向下解释。 在我的场景中,我使用的是Dictionary ,但问题对于List同样存在。 为简单起见,我在下面的示例中使用List 。 考虑这三个类: public abstract class MyBase { /* body omitted */ } public class MyDerived1 : MyBase { /* body omitted */ } public class MyDerived2 : MyBase { /* body omitted */ } 还有一些其他类的方法: public class Test { public T GetT() where T : MyBase { /* body […]