标签: static-methods

在父类上调用静态方法时,父类可以推断出子类型(C#)的类型吗?

假设我们有2个类,Child,以及它继承的类,Parent.

class Parent
{
    public static void MyFunction(){}
}

class Child : Parent
{
}
Run Code Online (Sandbox Code Playgroud)

是否有可能在父类中确定如何调用该方法?因为我们可以用两种方式来称呼它:

Parent.MyFunction();
Child.MyFunction();
Run Code Online (Sandbox Code Playgroud)

我目前的方法是尝试使用:

MethodInfo.GetCurrentMethod().ReflectedType; // and
MethodInfo.GetCurrentMethod().DeclaringType;
Run Code Online (Sandbox Code Playgroud)

但两者似乎都返回父类型.

如果你想知道什么,我正在努力完成(为什么我违反了父母不应该对孩子有任何了解的基本OOP规则),这就是它的缺点(如果你想要,请告诉我)长版):

我有一个Model结构,表示我们持久存储到数据库的一些数据.所有这些模型都从一个抽象的Parent继承.此父实现了一些事件,例如SaveEvent,DeleteEvent等.我们希望能够订阅特定于该类型的事件.所以,即使事件在父母身上,我也希望能够做到:

Child.SaveEvent += new EventHandler((sender, args) => {});
Run Code Online (Sandbox Code Playgroud)

我有一切就绪,事件实际上由事件处理程序字典支持,按类型进行哈希处理.我需要做的最后一件事就是在做Child.SaveEvent时正确检测Child类型.

我知道我可以在每个子类中实现事件(甚至通过使用抽象来强制它),但是将它全部保存在父类中会很好,这是实际触发事件的类(因为它实现了公共保存/删除/更改功能).

c# inheritance static-methods .net-3.5

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

java中的静态和非静态方法

可能重复:
方法何时应该是静态的?

我正在尝试为管/地铁票机制作接口类.不是真的,而是计算机科学模块的课程.我不明白何时使用静态方法.我不太了解计算机科学,但主要方法似乎使用静态.

class UNInterfaceTest
{
   public static final int NOTTING_HILL = 1;
   public static final int HIGH_KEN = 2;
   public static final int GLOUS = 3;
   public static final int SOUTH_KEN = 4;
   public static final int SLOANE = 5;
   public static final int VICTORIA = 6;
   public static final int ST_JAMES = 7;
   public static final int WESTMINSTER = 8;
   public static final int QUIT = 10;
   private Input in = new Input();

private static void displayMenu()
{ …
Run Code Online (Sandbox Code Playgroud)

java methods static-methods class

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

Cocoa Touch/iOS自动调用任何名为'load'的类静态方法

我遇到了涉及静态方法的Cocoa Touch/iOS的奇怪行为.如果在任何类中实现静态方法'load',Cocoa Touch/iOS将在应用程序开始执行时自动调用该方法.即使你没有从主执行线程中引用那个类,它仍然会被调用,无论如何.

我已经设法在Xcode 3.2.5上的SDK 4.2和Xcode 4.0.1上的SDK 4.3上编译时以及从iPhone模拟器和iPhone设备上运行时复制行为.

这是复制的方法:

创建一个新类并根据需要为其命名.在接口中声明一个静态方法'load'(任何返回类型):

+ (void)load;
Run Code Online (Sandbox Code Playgroud)

然后实现它:

+ (void)load {
    NSLog(@"What the?");
}
Run Code Online (Sandbox Code Playgroud)

编译(确保新类编译)并运行应用程序(在模拟器或设备上).应用程序启动时,切换到并监视GDB视图.你会看到"什么?" 虽然按逻辑没有其他代码引用类或方法,但在那里回显.

最重要的是,如果您在方法中使用任何自动释放代码,您将收到一个错误,表明该方法甚至在int main()方法之前被调用(存在的所有C应用程序的超级网关).

以下代码:

+ (void)load {
    NSLog(@"Hello %@", [NSString stringWithString:@"World"]);
}
Run Code Online (Sandbox Code Playgroud)

会给你一些看起来像的东西:

2011-04-21 00:41:53.828 AppName[548:707] *** __NSAutoreleaseNoPool(): Object 0x8fe8c of class NSCFString autoreleased with no pool in place - just leaking
2011-04-21 00:41:53.838 AppName[548:707] Hello World
Run Code Online (Sandbox Code Playgroud)

所以问题是,有人知道为什么Cocoa Touch/iOS会调用这种方法吗?方法名称'load'有什么特别之处?最后但并非最不重要的是,这是一个功能还是一个错误

p/s:我发现这种行为时,我实现的静态方法'load'实例化了许多自动释放的对象,我被__NSAutoreleaseNoPool()GDB中的多个警告消息困惑.

cocoa-touch static-methods ios4

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

如何在Python中使用static方法创建自我实例

在标题中我想知道如何在python中的static方法中使用自我实例.

python singleton static-methods

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

静态方法php中的动态绑定

class A
{
  static function get_name_derived_class()
  {
      //This function must return the name of the real class
      //Is it possible without insert a methon in B class?
  {
}

class B extends A
{

}

B::test()
Run Code Online (Sandbox Code Playgroud)

我希望在基类中有一个静态方法,它返回真实(派生)类的名称,而不插入特定的方法.可能吗?感谢名单

php static-methods dynamic-binding

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

从另一个类访问的静态ArrayList始终为空

我有以下课程

import java.util.ArrayList;
import java.util.List;

public class TestStaticArrayList {

    public static List<String> numberList = new ArrayList<String>();

    public static List<String> getArrayValues(){
    return numberList;
    }

    public static void populateArray() {
    numberList.add("1");
    numberList.add("2");
    numberList.add("3");        
    }
}
Run Code Online (Sandbox Code Playgroud)

上面类中的静态ArrayList是从下面的类调用动态填充的.

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class TestStaticInvokationClass {

    public static void main(String[] args) throws Exception {

    Class staticKlass = Class
        .forName("com.sathish.test.TestStaticArrayList");
    staticKlass.getMethod("populateArray", null).invoke(null, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图访问下面的类中的静态ArrayList.但它总是为空.

public class StaticArrayListAccessTest {

    public static void main(String[] args) throws Exception {   
    System.out.println(TestStaticArrayList.getArrayValues());

    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用

static …
Run Code Online (Sandbox Code Playgroud)

java static static-methods arraylist static-members

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

如何在c#中的非静态方法中调用静态方法

如何调用static方法里面的non static方法c#

采访者给了我一个场景:

class class1
{

    public static void method1(){}

    public void method2()
    {
        //call method1()
    }
Run Code Online (Sandbox Code Playgroud)

我们怎么做呢

.net c# static-methods

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

实例方法是否在c#中没有创建对象引用

我正在使用c#中的asp.net Web应用程序.我有一个名为GetUser的公共类.在那个类中,我有一个名为GetCurrentUser的方法.方法如下:

    public MobileUser GetCurrentUser(MDMDataContext dc, string userCode)
    {
        using (dc)
        {
            dc.ObjectTrackingEnabled = false;
            var currentUser =
                from MobileUser in dc.MobileUsers
                where MobileUser.UserCode == usercode                     
                select MobileUser;

            MobileUser mu = new MobileUser();
            mu = currentUser.Single();

            return mu;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用GetCurrentUser实例方法时,如下所示:

using (MDMDataContext dc = new MDMDataContext())
        {
            GetUser.GetCurrentUser(dc, "ABCD");
        }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,"非静态字段,方法或属性的对象引用' .... GetUser.GetCurrentUser ....'

但是如果我将static关键字添加到函数中,则错误就会消失.有人可以为我揭开这个概念的神秘面纱吗?

c# asp.net static-methods instance-methods

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

为什么静态方法有时为单独调用返回相同的结果?

在我的c#代码中,我有一个静态方法.这是代码示例:

public class RandomKey
{
    public static string GetKey()
    {
        Random rng = new Random();
        char[] chars = new char[8];
        for (int i = 0; i < chars.Length; i++)
        {
            int v = rng.Next(10 + 26 + 26);
            char c;
            if (v < 10)
            {
                c = (char)('0' + v);
            }
            else if (v < 36)
            {
                c = (char)('a' - 10 + v);
            }
            else
            {
                c = (char)('A' - 36 + v);
            }
            chars[i] = c;
        }

        string …
Run Code Online (Sandbox Code Playgroud)

c# static-methods

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

是否可以在C#中使用全局方法

所以我有一个静态类让我们说它叫做Worker,并且让我说它里面有一个名为Wait(float f)的方法,所有公共所以我可以在任何地方访问它,如下所示:

Worker.Wait(1000);
Run Code Online (Sandbox Code Playgroud)

现在我想知道有什么方法可以定义某种独特的特殊方法,所以我可以像这样做:

Wait(1000);
Run Code Online (Sandbox Code Playgroud)

(没有在课堂上我会使用它)?

c# static-methods static-libraries

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