Tag: language features

有没有办法逃避VB中的根命名空间?

namespace ConsoleApplication1 { class Program { static void Main(string[] args) { System.Text.MyCustom mc = new System.Text.MyCustom(); } } } namespace System.Text { public class MyCustom { } } 如何在VB中执行此操作,同时在应用程序中具有根命名空间,这可能吗? 更新 :根据答案,我认为没有办法做到这一点。 我向Microsoft Connect发布了一个function建议: 请投票 。

C#:表示方法的可执行方式是作为接口的一部分

在C#中是否有一种方法可以将方法标记为类的一部分以满足该类实现的接口? 我发现自己有时想在挖掘类的代码时为什么会有一些方法,但是当我尝试删除一个因为它没有被使用时,我认为为了让类实现一些接口是必要的。 将这些方法标记为这样很好。 也许像Java中的@Override注释 。 编辑:我宁愿不显式实现接口,因为然后访问我的类的实例上的接口方法变得更麻烦(即,必须在调用MyInterfaceMethod之前将MyClass的实例MyInterfaceMethod )。 编辑:我也不想使用区域。 我不希望通过某些任意名称松散地描述一大块代码作为接口实现的一部分,而是表示特定方法,无论它们在类中的哪个位置,都是接口的一部分。 甚至一些XML评论模板用于说明该方法所属的接口会很好。 编辑:所有答案似乎建议我明确实现接口,我不想做,或者我使用区域,我也不想这样做。 我认为威尔最了解我的要求。 我希望有类似注释的东西,所以我可以做类似以下的事情: [Interface(IMyInterface)] public void MyImplicitlyImplementedInterfaceMethod() { } 或者,正如dss539在对此答案的评论中提到的: public implement void MyImplicitlyImplementedInterfaceMethod() { } 就像我们今天override一样: public override bool Equals(object obj) { } 。

‘as`和`is`的真正用途

我曾经使用或者使用C#或任何支持该关键字的语言。 你用它做什么用的? 我不是说我如何使用它我的意思是你真的需要它? 我也在一个相当大的c ++项目中没有进行类型转换(我很自豪)。 所以考虑到我几乎从不打字,为什么我需要关键字as或是?

LINQ之后的下一个重大事项是什么?

当它还处于测试版时,我开始使用LINQ(语言集成查询),更具体地说是Microsoft .NET LINQ Preview(2006年5月)。 差不多4年了,我们在很多项目中使用LINQ来完成最多样化的任务。 我甚至根据LINQ写了我的最后一个大学项目。 你看我喜欢它。 LINQ以及最近的PLINQ(并行LINQ)在提高编程能力和减少代码行数方面为我们的工作提供了极大的推动力,使我们能够获得更具表现力和可读性的代码。 我一直在想LINQ之后C#的下一个重大语言改进。 我知道有一些突出的语言function作为代码合同等,但没有任何影响LINQ。 您认为下一件大事是什么?

有关C#语言规范中隐式转换的问题

6.1节隐式 转换因此定义了身份转换 : 身份转换从任何类型转换为相同类型。 存在这种转换,使得已经具有所需类型的实体可以被称为可转换为该类型。 现在,这些句子的目的是什么? (在§6.1.6隐式参考转换中) 隐式引用转换是: […] 从任何引用类型到引用类型 T如果它具有隐式标识或引用转换为引用类型 T 0并且T 0具有到T的标识转换。 和: (在§6.1.7拳击转换中) 如果值类型具有到接口类型I 0的装箱转换并且I 0具有到I的标识转换,则值类型具有到接口类型I的装箱转换。 最初它们似乎是多余的(同义词)。 但他们必须在某个目的,所以为什么他们在那里? 你能给出一个T 1 , T 2这两种类型的例子,如果不是上面引用的段落, T 1就不能隐式转换为T 2吗?

匿名类型和元组

匿名类型和元组之间有什么区别?

你如何找到呼叫者function?

作为“如何找到调用当前方法的方法?”的精确副本关闭。 这可能与c#有关吗? void main() { Hello(); } void Hello() { // how do you find out the caller is function ‘main’? }

C#:通过显式指定接口来覆盖属性

在尝试从Collection类覆盖ICollection.IsReadOnly属性的显式接口实现时,我遇到了一些文档,指出显式接口成员实现无法被覆盖,因为它们不能具有virtual或abstract等修饰符。 在MSDN上,他们甚至可以通过创建另一个由显式接口成员实现调用的抽象或虚拟成员来指定如何使显式接口成员实现可用于inheritance。 到目前为止没问题。 但后来我想知道: 为什么C#可以通过显式指定接口来覆盖任何显式实现的接口成员? 例如,假设我有一个这样的简单接口,具有属性和方法: public interface IMyInterface { bool AlwaysFalse { get; } bool IsTrue(bool value); } 还有一个显式实现接口的类A ,并且有一个方法Test() ,它调用自己的接口成员实现。 public class A : IMyInterface { bool IMyInterface.AlwaysFalse { get { return false; } } bool IMyInterface.IsTrue(bool value) { return value; } public bool Test() { return ((IMyInterface)this).AlwaysFalse; } } 如您所见,四个成员中没有一个是虚拟的或抽象的,所以当我像这样定义一个B类时: public class […]

C#空传播运算符/条件访问表达式&if块

c#-6.0中的Null传播运算符/条件访问表达式看起来非常方便。 但我很好奇它是否有助于解决检查子成员是否为null然后在if块内的所述子成员上调用布尔方法的问题: public class Container{ IEnumerable Objects {get;set;} } public Container BuildContainer() { var c = new Container(); if (/* Some Random Condition */) c.Objects = new List{1,2,4}; } public void Test() { var c = BuildContainer(); //Old way if ( null != c && null != c.Objects && c.Objects.Any()) Console.Write(“Container has items!”); //C# 6 […]

如何在C#中隐藏(删除)基类的方法?

问题的本质是,给定一个类层次结构如下: class A { protected void MethodToExpose() {} protected void MethodToHide(object param) {} } class B : A { new private void MethodToHide(object param) {} protected void NewMethodInB() {} } class C : B { public void DoSomething() { base.MethodToHide(“the parameter”); // This still calls A.MethodToHide() base.MethodToExpose(); // This calls A.MethodToExpose(), but that’s ok base.NewMethodInB(); […]