Tag: 隐式

如何将另一个结构隐式转换为我的Type?

因为它是MyClass x = 120; ,是否可以创建这样的自定义类? 如果是这样,我该怎么办?

为什么允许从超类到子类的隐式转换?

有人可以告诉我为什么“//编译”的行编译,以及“//不编译”的行为什么不编译? 我不明白为什么A可以隐含地转换为B,而不是相反。 public class SomeClass { static public void Test() { AClass a = new AClass(); BClass b = new BClass(); a = b; // Compiles b = a; // Doesn’t compile } } public class AClass { public void AMethod() { Console.WriteLine(“AMethod”); } } public class BClass : AClass { public void BMethod() { […]

实现接口隐式和显式是否有意义?

我正在攻读MS 70-515考试。 在其中一个实践中,作者实现了隐式和显式的接口。 显式实现只调用隐式实现。 刚才列出了显式实现而没有解释。 同时拥有接口的隐式和显式实现是否有意义? 我认为显式实现是多余的(在这种情况下)。 public class PassTextBox : TextBox, IScriptControl { public virtual IEnumerable GetScriptDescriptors() { var descriptor = new ScriptControlDescriptor( “AjaxEnabled.PassTextBox”, ClientID); // … return new ScriptDescriptor[] {descriptor}; } IEnumerable IScriptControl.GetScriptDescriptors() { return GetScriptDescriptors(); } } 顺便说一下,代码似乎在没有显式实现的情况下运行得很好,因为隐式实现是公开的。 它涉及MCTS Self-Paced Training Kit(考试70-515):使用Microsoft .NET Framework进行Web应用程序开发4第9章,第2课,练习3。

如何隐式地reflection方法调用

我有一个可以从string隐式转换的类Thing 。 当我直接使用Thing参数调用方法时,从string到Thing的强制转换正确完成。 但是,如果我使用reflection调用相同的方法,它会抛出exception System.ArgumentException : Object of type ‘System.String’ cannot be converted to type ‘Things.Program+Thing’. 也许有充分的理由,但我无法弄明白。 有人知道如何使用reflection工作吗? namespace Things { class Program { public class Thing { public string Some; public static implicit operator Thing(string s) { return new Thing {Some = s}; } } public void showThing(Thing t) { Console.WriteLine(“Some = ” + […]

字符串和整数,隐式和显式

有一个同事问我这个问题,在我脑子里迷茫的状态我没有答案: 你为什么这样做: string ham = “ham ” + 4; 但不是: string ham = 4; 如果在连接时存在字符串转换的隐式转换/操作,为什么在将其指定为字符串时不一样? (当然没有做一些运算符重载)

在可空类型上使用coalescing null运算符更改隐式类型

我希望接下来的三行代码是相同的: public static void TestVarCoalescing(DateTime? nullableDateTime) { var dateTimeNullable1 = nullableDateTime.HasValue ? nullableDateTime : DateTime.Now; var dateTimeNullable2 = nullableDateTime != null ? nullableDateTime : DateTime.Now; var dateTimeWhatType = nullableDateTime ?? DateTime.Now; } 在所有情况下,我将nullableDateTime分配给新变量。 我希望所有变量的类型都成为DateTime? 因为那是nullableDateTime的类型。 但令我惊讶的是, dateTimeWhatType的类型只是DateTime ,因此不可为空。 更糟糕的是,ReSharper建议用空合并表达式替换第二个语句,将其转换为表达式3.因此,如果我让ReSharper做它的事情,变量的类型将从DateTime?改变DateTime? 到DateTime 。 事实上,让我们说在方法的其余部分,我会使用 if (someCondition) dateTimeNullable2 = null; 这将编译得很好,直到我让ReSharper用空合并版本替换第二个表达式。 AFAIK,取代 somevar != null ? somevar : […]

等价隐式算子:为什么它们合法?

更新! 请参阅我对以下C#规范的一部分的剖析; 我想我必须遗漏一些东西,因为对我而言 ,我在这个问题中描述的行为实际上违反了规范。 更新2! 好的,经过进一步的反思,并根据一些评论,我想我现在明白了发生了什么。 规范中的“源类型”一词指的是从中转换的类型 – 即下面的示例中的Type2 – 这只是意味着编译器能够将候选缩小到两个定义的运算符(因为Type2是两种来源类型)。 但是,它无法进一步缩小选择范围。 所以规范中的关键词(适用于这个问题)是“源类型” ,我之前误解(我认为)是指“声明类型”。 原始问题 说我定义了这些类型: class Type0 { public string Value { get; private set; } public Type0(string value) { Value = value; } } class Type1 : Type0 { public Type1(string value) : base(value) { } public static implicit operator Type1(Type2 other) { […]

为什么使用显式接口实现来调用受保护的方法?

在codeplex中浏览ASP.NET MVC源代码时,我发现有一个类显式实现接口是很常见的。 显式实现的方法/属性然后调用具有相同名称的另一个“受保护的虚拟”方法/属性。 例如, public class MvcHandler : IHttpHandler, IRequiresSessionState { protected virtual bool IsReusable { get { return false; } } bool IHttpHandler.IsReusable { get { return IsReusable; } } } 我现在确定这种编程的好处是什么。 对我来说,我更喜欢隐式实现接口IHttpHandler。 我猜作者只是不希望MvcHandler有一个公共属性IsResuable 。 仅当MvcHandler的实例被视为IHttpHandler时,才能使用属性IsReusable 。 不过,我不确定为什么作者这样做。 有人知道这种界面实现的更多好处吗?

什么时候必须在C#中使用隐式和显式运算符?

这些运营商的用途是什么?

VB.Net缺乏隐式接口是否使我想做的事情变得不可能?

我知道VB.Net不允许像C#这样的隐式接口实现。 因此,如下代码没有直接的VB.Net相关性: public interface IBackgroundWorkerAdapter { bool IsBusy { get; set; } bool WorkerReportsProgress { get; set; } bool WorkerSupportsCancellation { get; set; } event DoWorkEventHandler DoWork; event ProgressChangedEventHandler ProgressChanged; event RunWorkerCompletedEventHandler RunWorkerCompleted; void RunWorkerAsync(); void CancelAsync(); void ReportProgress(int progressPercent); void ReportProgress(int progressPercent, object userState); } public class BackgroundWorkerAdapter: BackgroundWorker, IBackgroundWorkerAdapter { } 因此,我在VB.Net中可以想到的最接近的想法是使用Shadows关键字执行以下操作(因为没有任何操作是虚拟的): Public […]