相关疑难解决方法(0)

C#4.0中使用的"动态"类型是什么?

C#4.0引入了一种名为"dynamic"的新类型.这听起来不错,但程序员会用它做什么?

有没有可以节省一天的情况?

.net c# dynamic c#-4.0

218
推荐指数
5
解决办法
14万
查看次数

动态的使用被认为是一种不好的做法吗?

在C#中,有人可以这样做:

MyClass myInstance        = new MyClass();
dynamic mydynamicInstance = myInstance;
Run Code Online (Sandbox Code Playgroud)

然后,调用一个方法,如:

//This method takes a MyClass argument and does something.
Caller.InvokeMethod(myDynamicInstance);
Run Code Online (Sandbox Code Playgroud)

现在,这将导致在运行时确定myInstance类型,如果它有效,Caller.InvokeMethod将正常调用.

现在,我的问题是,如果这被认为是一种不好的做法dynamic,特别是在以下情况下:

1)InvokeMethod使用内部反射实例化myDynamicInstance类型的另一个实例.

2)有一个抽象基类MyBaseClass和它的许多子类,包括MyBaseClass.如果我们InvokeMethod为所有这些派生类提供了许多重载方法,我们是否可以使用它来在运行时允许类型确定,然后通过方法重载(或对该类方法调用的后期绑定)进行适当的调用)?:

public abstract class MyBaseClass         {/*...*/}
public class MyClass        : MyBaseClass {/*...*/}
public class MyAnotherClass : MyBaseClass {/*...*/}

MyBaseClass myBaseClassRef = new MyClass();
dynamic myDynamicInstance  = myBaseClassRef;

Caller.InvokeMethod(myDynamicInstance);
Run Code Online (Sandbox Code Playgroud)

c# reflection dynamic

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

什么是界面鸭打字?

我听到了接口鸭打字这个词,但根本不明白它是什么?所以我读了一篇关于这个的维基,他们说:

在使用面向对象编程语言的计算机编程中,duck typing是一种键入方式,其中对象的方法和属性确定有效的语义,而不是从特定类或显式接口的实现继承.概念的名称是指鸭子测试.

但仍然无法理解它是什么.所以,我看到了他们的计划,但他们使用的dynamic关键字来调用quack()feather()所有类的功能.

我会请求大家请简单解释什么是Interface Duck Typing以及如何在C#v2.0中实现,因为没有dynamic关键字.

using System;

namespace DuckTyping 
{  
  public class Duck 
  {
    public void Quack() 
    {
      Console.WriteLine("Quaaaaaack!");
    }

    public void Feathers() 
    {
      Console.WriteLine("The duck has white and gray feathers.");
    }
  }

  public class Person 
  {
    public void Quack()
    {
      Console.WriteLine("The person imitates a duck.");
    }

    public void Feathers() 
    {
      Console.WriteLine("The person takes a feather from the ground and shows it.");
    }
  }

  internal class Program 
  {
    private static …
Run Code Online (Sandbox Code Playgroud)

c# oop

28
推荐指数
4
解决办法
1万
查看次数

将控件视为ComboBox或TextBox

解决以下问题的最佳方法是什么?

foreach (Control control in this.Controls)
{
    if (control is ComboBox || control is TextBox)
    {
        ComboBox controlCombobox = control as ComboBox;
        TextBox controlTextbox = control as TextBox;

        AutoCompleteMode value = AutoCompleteMode.None;

        if (controlCombobox != null)
        {
            value = controlCombobox.AutoCompleteMode;
        }
        else if (controlTextbox != null)
        {
            value = controlTextbox.AutoCompleteMode;
        }

        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

您会发现它足够复杂以获取AutoCompleteMode属性.您可以假设我保证我有一个ComboBox或一个TextBox.

我的第一个想法是为T使用多种类型的泛型,但似乎这在.NET中是不可能的:

public string GetAutoCompleteModeProperty<T>(T control) where T: ComboBox, TextBox // this does not work, of course
Run Code Online (Sandbox Code Playgroud)

可悲的是,两个控件都没有共同的基类.

注意:这是一个与最小化示例一起使用的更一般的问题.在我的例子中,我还想访问/操纵其他AutoComplete*-proprties(两个控件都有共同点). …

.net c# generics

10
推荐指数
2
解决办法
2092
查看次数

C#中"dynamic"关键字的用途是什么?

C#中"动态"关键字的目的是什么,为什么我想要或不想要使用它?

.net c#-4.0

-1
推荐指数
1
解决办法
1716
查看次数

标签 统计

c# ×4

.net ×3

c#-4.0 ×2

dynamic ×2

generics ×1

oop ×1

reflection ×1