C#可不可以通过特性来设置函数的返回值 10C

如果从元数据上看特性类只是在函数里被实例化了一下是做不到改变函数的返回值的。
但是我在java的一个框架里看到了他们的一个注解应该和c#的特性差不多。

那是一个缓存框架在方法的上面写一个注解(特性)表明此方法可以使用缓存然后这个注解
有一个构造函数参数应该是作为key在缓存数据中取值,我想问这里应该是改变了那个函数的
返回值了的(有缓存返回缓存数据无缓存走自己数据库查询) C# 特性可以实现么有没有什么
相关技术名字我可以自己去查阅

谢谢

1个回答

不知道你具体想问什么,但是如果你的函数本身读取特性,然后将其中的值作为返回值,这个是可以的。

 using System;
using System.Linq;

class ReturnValueAttribute : Attribute
{
    public object val { get; set; }
    public ReturnValueAttribute(object v) {val = v; }
}

public class Test
{
    public static void Main()
    {
        // your code goes here
        int i = foo();
        Console.WriteLine(i);
    }

    [ReturnValue(100)]
    public static int foo()
    {
        var rtn = typeof(Test).GetMethod("foo")
            .GetCustomAttributes(typeof(ReturnValueAttribute), false).FirstOrDefault();
        return (int)((ReturnValueAttribute)rtn).val;
    }
}

https://www.ideone.com/8sbcwE

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复liujiaxing325: 不可以。特性是元数据,在编译期间被附加到类、方法等上面,注意是编译期间放进去的,而不是运行的时候绑定的,所以获取不了。
2 年多之前 回复
liujiaxing325
liujiaxing325 这么说比较简单吧 能不能通过特性获取 特性依附的方法的输入参数和返回值
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
.NET(C#):获取方法返回值的自定义特性(Attribute)

来自:http://www.cnblogs.com/mgen/archive/2011/11/02/2233374.html .NET中特性的索取就是围绕着ICustomAttributeProvider接口(System.Reflection命名空间内),而MethodInfo类的ReturnTypeCustomAttributes属性直接返回方法返回值的ICustomAttrib

【C#】特性基础篇——属性和方法(1)

在学习面向对象程序设计前就听说面对对象技术的几个特性:封装,继承,实现、多态。后来在听c#视频的过程中有听到几个名词;委托、抽象类、派生类、虚方法、重载方法、重写方法、构造函数、析构函数等。这么多高大尚的名词,后来自己有找了一些资料,把其中的有关的例子敲了一下。感觉也没有那么难啊!现在就有我来讲解一些希望可以帮到您!           在讲哪些高大上的知识之前,先来了解一些c#中基础性的东

只能靠参数而不能靠返回值类型的不同来区分重载函数

void function(void);int function (void);上述两个函数,第一个没有返回值,第二个的返回值是int类型。如果这样调用函数:  int x = function ();则可以判断出function是第二个函数。问题是在c++/c程序中,我们可以忽略函数的返回值。在这种情况下,编译器和程序员都不知道哪个function函数被调用。   所以只能靠参数而不能靠返回值类

通过形参获得函数返回值的问题

我们经常会用到将一个参数在函数外部初始化,然后传入函数,函数给参数赋值后,我们在函数外部使用这个值,最开始学习c++的时候我们就知道这需要将参数以引用的方式传入,却没有更深层次的考虑这个方法的原因,为什么传指针就不行呢?其实这个问题更深层次的原因是形参也是一个变量,我们在将一个初始化好的参数传入函数时其实是将参数赋给形参,比如void copy1(char*data1){ char* valu

c#入门学习ref和out

ref:ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。我的理解就是:ref能够把参数原本值带进函数内,经过一些运算,然后再带出去。(注意参数的值必须在调用之前赋值),就相当于将值直接传进去,方法里面可以对这个值进行修改之后,外面的值也会直接变化成修改的值,            //使用ref关键字的注意点:          ...

【C#语法】类和方法的特性Attribute

一、引言                 今天,我们来聊一下C#中的特性Attribute。何为特性Attribute?我们先看一个特性的使用例子,我们定义了一个Human类,但是由于某种原因该类不再被使用,但是我又不想将该类的代码注释或者删除掉,于是我们就可以通过给它赋予Obsolete特性来禁止别人使用: [Obsolete("该类已经过时,不能再使用",true)] pu

[干货来袭]C#7.0新特性(VS2017可用)

前言 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下其实2016年12月就已经公布了的C#7.0的新特性吧,虽然很早就出来了,但咱这IDE不支持啊.. 不过在昨天的VS2017中已经完美可以支持使用了. E文好的,移步官方介绍地址:https:

C#制作一个消息拦截器(intercept)1

首先,我们先要制作一个自定义Attribute,让他可以具有上下文读取功能,所以我们这个Attribute类要同时继承Attribute和IContextAttribute。 接口IContextAttribute中有两个方法需要实现 1、bool   IsContextOK(Context ctx, IConstructionCallMessage msg); 2、void  GetP

C++为什么不能通过函数返回值区分函数重载?

函数的两个要素:参数与返回值。    如果同名函数的参数不同(包括类型、顺序不同),那么容易区别出它们是不同的函数。   如果同名函数仅仅是返回值类型不同,有时可以区分,有时却不能。例如: void Function(void); int Function (void); 上述两个函数,第一个没有返回值,第二个的返回值是int 类型。如果这样调用函数:

Unity游戏开发——C#特性Attribute与自动化

这篇文章主要讲一下C#里面Attribute的使用方法及其可能的应用场景。比如你把玩家的血量、攻击、防御等属性写到枚举里面。然后界面可能有很多地方要根据这个枚举获取属性的描述文本。比如你做网络框架的时候,一个协议号对应一个类的处理或者一个方法。比如你做ORM,一个类的属性是否映射持久化文件中的属性,映射过去的属性名是什么。1、什么是Attribute如果用过Java的Annotation的同学,可

C# 自定义特性的使用

自定义特性类必须直接或间接的从 Attribute 派生。 自定义特性类可以添加 AttributeUsageAttribute 特性来限制自定义特性的使用范围。 AttributeUsageAttribute 的使用参照:.NET框架 三种预定义特性的介绍 注意事项: 1、根据约定所有的特性类类名都是以“Attribute”结束,以便将他们和“.NET Framework

C#中的特性 和 通过反射获取属性上的特性

1.首先了解类 AttributeUsage

特性是什么东东?

前言 我们初学C#的时候看到类上面一对中括号里面有个高亮了的关键字,不知道那是什么有什么用。想问人又不知道它叫什么。纠结的要命。其实,它就是特性。如: 这就是我们今天要分析的主题。 特性是什么? 个人理解,特性就是修饰对象元数据的修饰符。 那么什么是“元数据”? 元数据就是用来描述数据的数据。(挺拗口的) 如: 图中的1.是特性

c#通过反射获取类上的自定义特性

下面这个是笔者在以前的一个项目中用到的。当时是为了在导出excel报表的时侯,通过自定义特性,包含一些可配置的特性在里面。具体的操作excel不是本文重点,本文不会多做说明。下面只写个示例,简单说明一下如何通过反射获取自定义特性。示例只在类和属性上使用了自定义特性。读者可以按照实际的项目需求,合理使用自定义特性。 1、实现实体自定义特性,继承自Attribute类    ///   

c# Conditional用法详解

百度了一下关于conditional的文章,大都说的都是非常浅显,只是老生常谈了下尽量多使用conditional而少用#if,收获不大。 现在我自己测试了一下,也查阅了MSDN,有点心得,说出来与大家分享。 Conditional其实是一个属性类:ConditionalAttribute的简称。可应用于方法或者属性类。最常见的用法想必大家都知道: [Conditional("CONDITI

C# 使用‘反射(Assembly)’查找具有指定‘特性(Attributes) ’的类

----------------------------------------------------- 1.测试需要的特性 using System; using System.Collections.Generic; using System.Linq; usin

C#只能靠参数而不能靠返回值类型的不同来区分方法重载

<br />重载必须要用参数来区分,传入不同参数,可以实现重载。<br />可以这样理解,你调用一个方法,如果有多个方法同名,系统必须要知道到底你要调用哪一个,参数可以帮助系统在方法入口处得到答案,他根据你给的参数就知道该将哪个方法的入口调入栈中。<br />如果只有返回值的不同,很多情况系统是不可能得到有效的判断条件的。<br />比如:string method();<br />            int method();<br />上面两个方法,第一个返回字符串类型值,第二个的返回值是整数类型。

C# 中的委托和事件(详解) ....

C# 中的委托和事件        委托和事件在 .NET Framework 中的应用非常广泛,然而,较好地理解委托和事件对很多接触 C# 时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里堵得慌,浑身不自在。本章中,我将由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.NET Framework 中的委托和事件、

C#中的特性,什么是特性.

什么是特性? 特性(attribute)是一种允许我们向程序的程序集添加元数据的语言结构.它是用于保存程序结构信息的某种特殊类型的类.      将应用了特性的程序结构叫做目标.      设计用来获取和使用元数据的程序(对象浏览器)叫做特性的消费者      .NET预定了很多特性,我们也可以声明自定义特性. Obsolete特性(方法前): 可以使用Obsolete

c读取mat文件,并调用m生成的dll中的函数,函数返回值保存为mat文件

c读取mat文件,调用dll函数,返回值写入mat文件,mxArray内存管理松散,需要最后销毁。 #include "stdafx.h" #include #include "mat.h" #include #include "libAutoExtract.h" #include #pragma comment(lib, "mclmcrrt.lib" ) #pragma

C#调用含有数组类形参和返回值的matlab函数实例

C#调用含有数组类形参和返回值的matlab函数实例

GetLastError返回值的意义

通过调用GetLastError函数,返回值的意义

InternetSetOption 网络API

InternetSetOption函数     用到的变量     -------------------------------------------------    Private   Const   INTERNET_OPTION_CONNECTED_STATE   =   50     Private   Const   INTERNET_STATE_DISCONNECTED_

Emit语法简单实现(含实例)

Emit语法简单实现

Jenkins系列(二)----迈入Jenkins的第一步

一、环境准备 1)安装JDK 使用Jenkins的第一步就是安装Java,Jenkins是一个基于Java的Web的应用程序,所以至少你的安装JRE。这里可以安装JDK7/JDK8。安装过程可参考:http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 2)安装Git 安装过程可参考:http://blo

C#反射,特性结合使用

using System; using System.Reflection; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { //View class Progr

C#函数如何实现类似多个返回值的功能

C#中函数是不具备返回多个值的功能,因此我们要实现类似的功能,可从以下几个方面考虑 在方法中传入参数 out/ref 返回数组 返回某个对象的实例 1.方法中传入参数 using System; namespace MultiReturn { class Arithmetic { class JiaJian {

C#制作一个消息拦截器(intercept)4

ok,我们拦截器基本构造完成,接下来我来告诉大家如何去使用。 首先

c#属性,以及特性类

Property 对类来说:属性成员描述的是状态信息,对类的实例来说,属性成员的值表示的是该对象的状态值。   1、如果类Z是抽象的,包含它的类A 也应该是抽象的。 2、重写属性的声明必须与指定与所继承的属性相同的修饰符,类型等 3、如果被继承的属性只有单个访问器(读或者写),重写属性也只能单个访问器。如果被继承的属性有两个访问器,重写属性可以只包含一个,也可包含两个 4、重写属性可以

c#特性简述使用

什么是特性? 定义:特性本质上也是有一种类,通过添加属性,就可以实例化这个属性类; 直接进入正题,特性大致可以分为两种: 一:系统自带的特性 二:自定义特性 我们主要讲一下如何自定义特性,定义的方式和普通的类定义方式一致,但是, 第一:需要继承标准特性类 第二:需要添加标准特性,用来限制特性的使用范围等 第三:必须要定义构造函数,即使是空的 如下: [Attribu

crt激活工具

真实可用的crt激活工具,不能用你来打我,不知道这软件可不可以通过审核

【C#】匿名函数使用

namespace 匿名函数使用 {     class Program     {         delegate void NumberChanger(int n);         class TestDelegate         {             static int num = 10;             public static v

js函数嵌套调用,无法获取函数返回值

正常情况:function a() { return true; } function b() { var ret = a(); alert(ret); }异常情况:function a() { $.ajax({ url:'www.baidu.com', data: {}, method:'post', dataType:'j...

C#中Obsolete特性

class Program { static void Main(string[] args) { A a = new A(); B b = new B(); b.NewMethod(); b.OldMethod(); Console.

return false 正确运用

可能在你刚开始学习关于jQuery事件处理时,看到的第一个例子就是关于如何阻止浏览器执行默认行为,比如下面这段演示click事件的代码: $("a.toggle").click(function () {      $("#mydiv").toggle();      return false; // Prevent browser from visiting `#`  });

异步操作 BeginExecuteNonQuery

问题  有时候我们需要在SQL Server数据库上执行异步操作,即在后台任务中执行该操作,主程序则可以执行其它操作。 解决方案 使用SqlCommand类的BeginExecuteNonQuery、BeginExecuteReader或BeginExecuteXmlReader方法开始执行一个后台数据库操作。这些方法都会返回一个System.IAsyncResult对象,我们可

C# URL访问和获取返回值

C# URL访问和获取返回值的一个简单函数

C#5.0特性之 async异步方法

//1.方法用async关键字修饰 //2.返回值只能是void,Task,或Task //3.方法以Async为后缀 public static async Task AccessTheWebAsync() { HttpClient client = new HttpClient();

子类可以重新定义父类的同名方法,并且允许他们有不同的返回值类型吗?

在子类继承父类中,子类重新定义父类中的同名方法,其实就是对父类方法的重写,所以是可以的。例如:public class a { public void x(){ System.out.println(1); } }public class b extends a { public void x(){ System.out.println...

Java中能否利用函数参数来返回值

我们在写代码时通常会遇到一种情况,就是我们可能希望在一个函数操作完成后返回两个值,这两个值互不关联并且不希望以数组的形式返回,甚至这两个返回值都不属于同一种类型,这种情况下在C或C++中可以轻易的使用一个引用的参数来将想要返回的值作为参数传入函数,等函数执行完毕后就可以得到你想要的“返回值”了。 但是这种情况在Java中可能就没有那么轻易了,我们知道Java语言最大的一项改变就是隐藏了类似C或

python通过函数变量(深拷贝)来返回值

类似于c里面的指针作为参数传递给函数,python中通过深拷贝来返回数值   def fun(a): a[:] = [1,2] b = [2,3] fun(b) print(b) 输出结果为【1,2】,故可以将要返回的值,作为变量传递给函数,但是要注意给参数赋值的方式,本例中函数如果用a=[1,2],那将b作为参数传递进去仍不会改变。 结合python中的赋值,深浅拷贝分析,列表

java方法参数和返回值

-

C#反射,特性,数据库结合使用

C#反射,特性,数据库结合使用

疯了!通过返回值进行函数重载

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。重载不关心函数的返回值类型double calculate(double); float calculate(double);以上

C# 请求跨域 mvc特性(指定action)

C# 请求跨域 mvc特性(指定action)

C#反射和特性

C#反射和特性 1、Type类 预定义类型(int long和string等),BCL中的类型(Console,IEnumerable等)和程序员自定义类型(MyClass,MyDel等)。 每种类型都有自己的成员和特性。 BCL声明了一个叫做Type的抽象类,它被设计用来包含类型的特性。使用这个类的对象能让我们获取程序使用的类型的信息。 由于 Type是抽象类,因此不能利用它去实例化对象

matlab有多个返回值时C#如何接收

Matlab函数: function[dstmat,answ]=MatrixMultiply(scamat1,srcmat2) dstmat=scamat1*srcmat2; dstmat=double(SubFun(dstmat)); answ=[1,2;3,4]; end   function dstmat=SubFun(srcmat) dstmat=srcmat*1; en

C# 使用自定义的特性Attribute

C#编程经常使用特性,相当于类的元数据 自定义特性继承System.Attribute类 自定特性命名后缀为Attribute,这样符合微软的命名风格,也符合编译器的搜索规则 使用[]语法使用自定义特性 可以使用反射来查看自定义特性

基于特性(Attribute)的实体属性验证方案设计

各位朋友,我是Payne,大家好,欢迎大家关注我的博客,我的博客地址是https://qinyuanpei.github.io。在这篇文章中,我想和大家探讨下数据校验的相关问题,为什么我会对这个问题感兴趣呢?这其实是来自最近工作中相关需求场景,而这篇文章其实是我在去年就准备要写的一篇文章,这篇文章一直存放在草稿箱里没有发布出来,所以结合这段时间项目上的思考,对当初的设计方案进行了改进,所有就有了大家

为什么函数重载不可以根据返回类型区分?

因为调用时不能指定类型信息,编译器不知道你要调用哪个函数。 例如 float max(int a, int b); int max(int a, int b); 当调用max(1, 2);时无法确定调用的是哪个,单从这一点上来说,仅返回值类型不同的重载是不应该允许的。 再比如对下面这两个方法来说,虽然它们有同样的名字和自变量,但其实是很容易区分的: void f() {}

相关热词 c# 解析cad c#数字格式化万 c#int转byte c#格式化日期 c# wpf 表格 c# 实现ad域验证登录 c#心跳包机制 c#使用fmod.dll c#dll vb 调用 c# outlook
立即提问
相关内容推荐