C# C语言中的无类多态性#

C# C语言中的无类多态性#,c#,polymorphism,C#,Polymorphism,我不熟悉面向对象编程。问题是,当我们在类中定义一个方法时,我们可以这样使用该方法: myobj.mymethod(params); 但我不希望我的方法是类的成员,但仍然是多态函数。我的意思是,我希望它是一个“自由”函数,根据它的参数做不同的事情。例如: mymethod(myobjoftype1, intvar); // works with ints mymethod(myobjoftype2, stringvar); // different function that works wit

我不熟悉面向对象编程。问题是,当我们在类中定义一个方法时,我们可以这样使用该方法:

myobj.mymethod(params);
但我不希望我的方法是类的成员,但仍然是多态函数。我的意思是,我希望它是一个“自由”函数,根据它的参数做不同的事情。例如:

mymethod(myobjoftype1, intvar); // works with ints
mymethod(myobjoftype2, stringvar); // different function that works with strings

这在C#中是可能的吗?

在C#中是不可能的,因为所有的东西都是类或类的成员

对于您的问题,我建议使用只有静态方法的类

用法:

ClassName.MethodName();
所有具有不同参数的方法都应该在这个特定类中实现(方法重载)


但是如果它不适合您,您应该看看(但在这种情况下,您还需要创建至少一个类)。

您可以在不使用特定类的情况下执行类似操作

我假设您实际上不想仅仅为了方法重载而创建类

public void Main() // Your main method
{
  mymethod("fff", 2); // Will call first mymethod
  mymethod(2.13, "ff"); // Will call second mymethod
}

void mymethod(string str, int intvar)
{
  Console.WriteLine("m1"); 
}

void mymethod(double flt, string stringvar)
{
  Console.WriteLine("m2"); 
}

所有方法或函数都可以从某些所有者(类或结构)调用

名称空间自定义名称空间
{

//公共静态SomeFreeMethod(someparams){}可能是类型,动态可能对您有用

该类型是静态类型,但动态类型的对象会绕过静态类型检查


听起来更像是想要一个泛型方法,例如
mymethod
,而不是多态方法。使用泛型方法或扩展方法方法必须始终是类或结构的成员。没有“自由”的概念C#中的函数。如果不想创建类的实例,可以声明方法
static
。在C#中,没有类就无法实现多态性,需要查看泛型。泛型必须在类中。是的,只是主程序类,只是如果他不想为简单的目的编写类cause@DanielA.White - “不在课堂上”的要求看起来像是在转移注意力。无论如何,这是不可能实现的,这是关于第二个问题。
namespace CustomNamespace
{
    // public static SomeFreeMethod(some params) { } <- This can't be in C#

    // For your case you can use code samples below
    public static class SomeStaticClass {

        public static void SomeMethod() { }

        public static void SomeMethod(object p1, object p2);

        public static void SomeMethod(object p1, object p2, object p3);

        public static T SomeMethod<T>(T o1, T o2, T o3) { return default(T); }
    }

    public class SomeInstanceClass {

        public SomeInstanceClass() {
          // call methods from static class in instance of object
          SomeStaticClass.SomeMethod();
          SomeStaticClass.SomeMethod(3, 6);
          SomeStaticClass.SomeMethod('c', "dasda", 3);
          float someResult = SomeStaticClass.SomeMethod<float>(3.45f, 312.233f, 3.14f);
        }
    }
}