星辰.Net技术社区

网站首页 » 百科首页 » CSharp » 特性Attribute的疑问
相关文章推荐:
  1. RegisterExpandoAttribute()实现缺陷
  2. 枚举的多语言显示(2)——使用Attribute
  3. Attribute 和 Reflection
  4. C#--Attribute本质论
  5. C#--Attribute初体验
相关问题推荐:
  1. HashTable的引用是否可以用“传值”/“传参”来区分?
  2. server error in '/' application(请高手帮忙啊)
  3. 什么是 值按位组合
  4. 在自定义类的实例时中,如何获取属性的PropertyAttr
  5. 关于项目中listView获取字段显示的问题
问题--提问时间:2008-8-7 9:06:00

以下我学习特性的例子。结果和我想你的不一样。不知为什么??

using System;
using System.Reflection;                                

 
//应用反射技术获得特性信息

namespace AttributeTest
{

    [AttributeUsageAttribute(AttributeTargets.All,        
//可应用任何元素
         AllowMultiple = true,                            //允许应用多次
         Inherited = false)]                              //不继承到派生类
       
    
public class MyselfAttribute : System.Attribute
    
{
        
//定义字段
        private string _name;
        
private int _age;
        
private string _memo;

        
public MyselfAttribute(string name, int age)
        
{
            _name 
= name;
            _age 
= age;
        }


        
public string Name
        
{
            
get return _name == null ? string.Empty : _name; }
        }


        
public int Age
        
{
            
get return _age; }
        }


        
public string Memo
        
{
            
get return _memo; }
            
set { _memo = value; }
        }


        
//定义方法
        public void ShowName()
        
{
            Console.WriteLine(
"Hello, ", _name == null ? "world." : _name);
        }

    }


    [Myself(
"无声E梦"25, Memo = "我是一个程序员")]    
    
public class Mytest
    
{
        
public static void Main(string[] args)
        
{
            Type tp 
= typeof(Mytest);
            MyselfAttribute myAttribute 
= (MyselfAttribute)Attribute.GetCustomAttribute(tp,typeof(MyselfAttribute));
            
                
            
if(myAttribute != null)
            
{
                Console.WriteLine(
"Name:",myAttribute.Name);
                Console.WriteLine(
"Age: ", myAttribute.Age);
                Console.WriteLine(
"Memo: ", myAttribute.Name, myAttribute.Memo);

            }


        }

    }


}

结果为:
Name:
Age:
Memo:
 
为什么不输出:
Name:无声E梦
Age:25
Memo:我是一个程序员
 
请大家指教

答案
最基本的搞错了,呵呵,看看Console.WriteLine方法的参数,这样写就可以了。
第一种:
if (myAttribute != null)
{
    Console.WriteLine("Name: " + myAttribute.Name);
    Console.WriteLine("Age: " + myAttribute.Age);
    Console.WriteLine("Memo: " + myAttribute.Name + myAttribute.Memo);
}
第二种:
if (myAttribute != null)
{
    Console.WriteLine("Name: {0}", myAttribute.Name);
    Console.WriteLine("Age:{0} " , myAttribute.Age);
    Console.WriteLine("Memo:{0} " ,myAttribute.Name + myAttribute.Memo);
}
第三种:
if (myAttribute != null)
{
    Console.WriteLine(String.Format("Name: {0}", myAttribute.Name));
    Console.WriteLine(String.Format("Age:{0} " , myAttribute.Age));
    Console.WriteLine(String.Format("Memo:{0} " ,myAttribute.Name + myAttribute.Memo));
}
这些写法都可以。