gpt4 book ai didi

c# - 如何调用和调用静态函数的属性?

转载 作者:太空宇宙 更新时间:2023-11-03 22:06:51 25 4
gpt4 key购买 nike

我试图了解 C# 中属性的限制。我想像这样将属性应用于静态函数:

1 public class Simple : System.Attribute
2 {
3 public Simple() { System.Console.WriteLine("Simple ct"); }
4 }
...
5 [Simple]
6 public static void DummyFn()
7 {
8 System.Console.WriteLine("Dummy fn!");
9 }
...
10 DummyFn();

所以,这就是我想要发生的事情:

  • 第 10 行调用 DummyFn。
  • 调用 DummyFn 时,将调用 Simple() 构造函数,它会发出“Simple ct”行。
  • 之后 DummyFn() 被调用,发出一行“Dummy fn!”

据我所知,这是行不通的。但是,如果我使 DummyFn() 成为非静态的,它就可以工作。有人可以帮助我理解这种行为吗?

最佳答案

如果你想构造你的属性,你必须这样查询元数据

class Program
{
static void Main(string[] args)
{
InvokeTest(new Action(Program.Crap));

var p = new Program();

Console.WriteLine(InvokeTest(new Func<int, int>(p.Pipi), 3));
Console.ReadLine();
}

static object InvokeTest(Delegate d, params object[] args)
{
d.Method.GetCustomAttributes(typeof(CocoAttribute), false);

return d.DynamicInvoke(args);
}

[Coco]
static void Crap()
{
Console.WriteLine("Caca");
}

[Coco]
int Pipi(int a)
{
Console.WriteLine("Pipi: " + a);

return a * 2;
}
}

[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
sealed class CocoAttribute : Attribute
{
// This is a positional argument
public CocoAttribute()
{
Console.WriteLine("Coco");
}
}

这个程序会显示 cocoa 卡卡 cocoa 皮皮:36

--- 经弗朗西斯您的许可,我编辑了您的答案。

这行不通

class Program
{
static void Main()
{
new Program().DummyFn();
}

public class Simple : System.Attribute
{
public Simple()
{
System.Console.WriteLine("Simple ct");
}
}

[Simple]
public void DummyFn()
{
System.Console.WriteLine("Dummy fn!");
}
}

关于c# - 如何调用和调用静态函数的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8141719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com