Tag:

C#Object Constructor – 简写属性语法

几个月前,我读到了一种技术,如果传入的参数与局部变量匹配,那么你可以使用一些简短的语法来设置它们。 为了避免这种情况 public string Method(p1, p2, p3) { this.p1 = p1; this.p2 = p2; this.p3 = p3; } 有任何想法吗?

如何强制调用C#派生方法

我有一个由某个工具生成的类,因此我无法更改它。 生成的类非常简单(没有接口,没有虚方法): class GeneratedFoo { public void Write(string p) { /* do something */ } } 在C#项目中,我们希望提供一种方法,以便我们可以插入MyFoo的不同实现。 所以我想让MyFoo从GeneratedFoo派生 class MyFoo : GeneratedFoo { public new void Write(string p) { /* do different things */ } } 然后我有一个CreateFoo方法,它将返回GeneratedFoo或MyFoo类的实例。 但是它总是调用GeneratedFoo中的方法。 GeneratedFoo foo = CreateFoo(); // if this returns MyFoo, foo.Write(“1”); // it stills calls GeneratedFoo.Write 这是因为它不是虚方法而被删除。 但我想知道是否有一种方法(可能是黑客)让它调用派生方法。 […]

类和数据类型有什么区别?

我听到以下声明: 我们可以说class是数据类型或数据类型是一种类。 任何人都可以向我解释这究竟是什么意思?

访问者的目的是什么?

有人可以帮我理解get & set吗? 他们为什么需要? 我可以做一个公共变量。

为什么基类必须有一个带0参数的构造函数?

这不会编译: namespace Constructor0Args { class Base { public Base(int x) { } } class Derived : Base { } class Program { static void Main(string[] args) { } } } 相反,我收到以下错误: ‘Constructor0Args.Base’不包含带0参数的构造函数 这是为什么? 基类是否需要一个带0参数的构造函数?

如何在C#中覆盖inheritance的类属性?

我学习了如何通过向基类中的方法添加virtual并在新类中override来inheritance方法。 但是我该如何inheritance属性呢? class bird { private virtual string fly = “Yes, I can!”; public string CanI() { return fly ; } } class penguin : bird { private override string fly = “No, I can’t!”; } 这会弹出一个错误,说不应该在这里使用修饰符virtual / override 。

如何将复杂的XML转换为.NET类?

我有这个XML ,只是想知道如何转换成C#类 ? Sample text… clientLogo.png

现场成员与方法变量?

最近我一直在考虑类字段成员和方法变量之间的性能差异。 我的意思是在下面的例子中: 假设我们有一个Linq2SQL的DataContext对象 class DataLayer { ProductDataContext context = new ProductDataContext(); public IQueryable GetData() { return context.Where(t=>t.ProductId == 2); } } 在上面的示例中,上下文将存储在堆中,并且在执行Method之后将从Stack中删除GetData方法变量。 因此,让我们检查以下示例以区分: class DataLayer { public IQueryable GetData() { ProductDataContext context = new ProductDataContext(); return context.Where(t=>t.ProductId == 2); } } (* 1)所以我们知道的第一件事就是如果我们将ProductDataContext实例定义为一个字段,我们可以在类中的任何地方到达它,这意味着我们不必一直创建相同的对象实例。 但是让我们说我们正在谈论Asp.NET,一旦用户按下提交按钮,就会将数据发送到服务器并执行事件,并通过上述方法将发布的数据存储在数据库中,这样很可能是同一个用户如果我在页面执行后正确地知道了,终结器就会从内存(从堆中)中清除,这意味着我们也会从内存中丢失实例变量并在另一个post之后丢失DataContext应该再次为新页面循环创建。 因此,向全class公开宣布它的唯一好处就是上面的第一个文字。 或者还有其他什么吗? 提前致谢… (如果我说错了,请修理我..)

用reflection得到领域

我想得到所有具有空值的字段,但我甚至得到任何字段: [Serializable()] public class BaseClass { [OnDeserialized()] internal void OnDeserializedMethod(StreamingContext context) { FixNullString(this); } public void FixNullString(object type) { try { var properties = type.GetType().GetFields(); foreach (var property in from property in properties let oldValue = property.GetValue(type) where oldValue == null select property) { property.SetValue(type, GetDefaultValue(property)); } } catch (Exception) { } } public object […]

对于需要引用其他类的类,C#中的优秀设计模式是什么?

我正在研究C#.NET中的业务问题。 我有两个名为C和W的类,它们将在不同的时间独立实例化。 类C的对象需要包含对类W的0 … n个对象的引用,即C对象最多可包含n个W对象。 每个W对象需要包含对C类的1个对象的引用,即W对象包含在一个C对象中。 通常首先实例化C类的对象。 稍后,将发现并实例化其W内容。 在此之后,我需要将C和W对象相互交叉引用。 这有什么好的设计模式? 我实际上有一些案例,我有三个或四个类,但我们可以谈论两个类,以保持简单。 我在考虑一些简单的事情: class C { public List contentsW; } class W { public C containerC; } 这将暂时起作用,但我可以预见必须编写相当数量的代码来跟踪所有引用及其有效性。 我想在后面实现代码,只对容器进行浅刷新,并对所有引用类进行深度刷新。 还有其他方法,它们有什么优势? 编辑11/3:感谢所有人的好答案和良好的讨论。 我最终选择了jop的答案,因为它最接近我想要的,但其他答案也有帮助。 再次感谢!