c#经典入门学习笔记-定义类成员

来源:互联网 发布:java ftp上传文件卡死 编辑:程序博客网 时间:2024/06/08 08:01

基本语法部分:
成员的访问级别确定成员的使用范围,常用下面的关键字:
public--成员可以由任何代码访问
private--只能由类中的代码访问
internal--只能由定义它的项目内部的代码访问
protected--成员只能由类或派生类中的代码访问
字段的定义:class myClass{ public int MyInt } 如果该属性是只读的,就需要加关键字 readonly,加了该关键字之后,只能在构造函数内为其赋值。
方法的定义:方法在定义时使用标准函数的格式,static为可选修饰符来声明。class myClass{ public string GetString() { return "Here is  a string." } }。在定义方法时,使用的关键字可以有以下几个:
virtual--方法可重写
abstract--方法必须在非抽象的派生类中重写(只用于抽象类中)
override--重写一个基类方法
extern--方法定义放在其他地方
属性的定义:属性在定义时,格式跟字段类似,但与之不同的是有get 和set语句块用来获取属性值。
语法为:public int MyIntProp{ get { }  set { }}
如:public int MyIntProp{
 get { return value; }
 set { MyIntProp=value; }
}如果,希望可以对值进行测试就需要加判定语句如:
set{
 if(value>=0 && value<=10){ myInt=value; }
 else{throw(new ArrgumentOutOfRangeException("MyIntProp",value,"MyIntProp must   be assingned a value between 0 and 10"}//此处加了一个抛出一个错误的语句。
}


接口:先来看下如何定义接口
interface IMyInterface{//Interface memebers}
看起来接口与类成员定义相似,但与之相比有以下区别:
不允许使用访问修饰符,因为接口是公共的.
接口成员不能包含代码体
接口不能使用关键字
类型定义成员是禁止的
如果要隐藏继承了基接口的成员,可以使用new关键字来定义它们.
例如:
interface IMyBaseInterface{
 void DoSomething();
}
interface IMyDerivedInterface:IMyBaseInterface
{new void DoSomething()}
接下来是在类中实现接口:
public interface IMyInterface
{
 void DoSomething();
 void DoSomethingElse();
}
public class MyClass:IMyInterface
{
 public void DoSomething(){}
 public void DoSomethingElse(){}
}

如下示例:
建立一个class1.cs的文件,该文件代码如下:
public class MyClass
{
    public readonly string Name;
    private int intVal;
    public int IntVal
    {
        get { return intVal; }
        set { intVal = value; }
    }
    public int val
    {
        get
        {
            return intVal;
        }
        set
        {
            if (value >= 0 && value <= 0)
                intVal = value;
            else
                throw (new ArgumentOutOfRangeException("val", value, "Val must be assigned a value between 0 an 10!"));
        }
    }
    public override string ToString()
    {
        return "Name:" + Name + "/nVal:" + val;
    }
    private MyClass()
        : this("Default Name")
    {
    }
    public MyClass(string newName)
    {
        Name = newName;
        intVal = 0;
    }
}
再建立一个class2.cs的文件:
namespace ConsoleApplication1
{
    public class MyBaseClass
    {
        public virtual void Dosomething()
        {
            Console.WriteLine("Base imp");
        }
    }
    public class MyDerivedClass : MyBaseClass
    {
        new public override void Dosomething()
        {
            Console.WriteLine("DerivedClass imp");
        }
    }
}
主文件为:namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("creating object myobj..");
            MyClass myobj = new MyClass("My Object");
            Console.WriteLine("myobj created");
            for (int i = -1; i <= 0; i++)
            {
                try
                {
                    Console.WriteLine("/nAttempting to assign{0} to myobj.val..", i);
                    myobj.val = i;
                    Console.WriteLine("Value {0} assigned to myobj.val", myobj.val);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception {0} thrown.", e.GetType().FullName);
                    Console.WriteLine("Message:/n/"{0}/"", e.Message);
                }
            }
            Console.WriteLine("/noutputing myobj.Tostring()...");
            Console.WriteLine(myobj.ToString());
            Console.WriteLine("myobj.Tostring() output.");
            MyBaseClass myobj2 = new MyBaseClass();
            myobj2.Dosomething();
            Console.ReadKey();
        }
    }
}