我是面向对象编程的新手。问题是,当我们在类中定义方法时,我们可以用这种方式使用该方法:
myobj.mymethod(params);
但我不希望我的方法成为该类的成员,但仍然是一个多态函数。我的意思是,我希望它成为一个免费的"根据参数执行不同操作的函数。例如:
mymethod(myobjoftype1, intvar); // works with ints
mymethod(myobjoftype2, stringvar); // different function that works with strings
这在C#中是否可行?
答案 0 :(得分:2)
制作一个独立的方法'在C#中是不可能的,因为一切都是类或类的成员。
对于您的问题,我建议使用只有静态方法的static类。
用法:
ClassName.MethodName();
所有具有不同参数的方法都应该在这个特定的类中实现(方法重载)。
但如果它不适合你,你应该看看generic methods(但在这种情况下你还需要创建至少1个类。)
答案 1 :(得分:0)
可以从某些所有者(类或结构)调用所有方法或函数
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);
}
}
}
答案 2 :(得分:0)
可能是Type Dynamic对您有用。
类型是静态类型,但动态类型的对象绕过静态类型检查。
答案 3 :(得分:-1)
您可以在不使用特定类的情况下执行此类操作
我认为你实际上并不想仅仅为了方法重载而创建类。
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");
}