目录一、类成员的访问级别二、定义字段三、定义方法四、定义属性五、接口实现六、定义索引器七、运算符重载八、定义事件一、类成员的访问级别 public:可由任何代码访问。private(
class MyClass
{
public int MyInt;//公共字段
int myInt;//私有字段
public readonly int MyInt2 = 17;//只读成员,只能在声明时赋值或在构造函数中赋值。
public static int myInt3;//静态字段,通过类访问。作用:1、记录一实例化对象的个数,2、存储必须在所有实例间共享的值。
public const float PI = 3.14F;//常量,编译时就固定,一旦发生更改,需要重新编译,必须且只有在声明时初始化。
}
方法的继承修饰符:
void Main()
{
A b1 = new B();//多态
b1.M();//BM
B b2 = new B();
b2.M();//BM
}
abstract class A
{
public virtual void M()//虚拟方法,可继承
{
Console.Write("AM");
}
}
class B : A
{
public override void M()// 重写了基类方法M
{
Console.Write("BM");
}
}
无论基类是否为虚拟,派生类都可以用new 来隐藏。不覆盖基类方法,不影响基类的方法。可以用base.M()方式访问基类成员。
void Main()
{
A b1 = new B();
b1.M();//AM
B b2 = new B();
b2.M();//BM
}
abstract class A
{
public virtual void M()//虚拟方法,可继承
{
Console.Write("AM");
}
}
class B : A
{
public new void M()// 重写了基类方法M
{
Console.Write("BM");
}
}
属性的继承修饰符:virtual,abstract,override.
public class A
{
private int intVal;
public int Val
{
get { return intVal; }
set
{
if (value >= 0 && value <= 10)
intVla = value;
else
throw new Exception("XX");
}
}
}
实现接口的类必须实现所有接口成员,且匹配指定的签名。接口成员默认是公共的。
若要实现接口成员,类中对应的成员必须是公共的,非静态的,并且与接口成员集邮相同的名称和签名。
interface IMyInterface //定义接口
{
int DoSth();//定义方法
int IMyInt { set; get; }//定义属性
event EventHandler Event;//定义事件
string this[int index] { get; set; } //定义索引器
}
class MyClass : IMyInterface
{
private int _x;
int IMyInterface.DoSth() //显示接口实现
{
return _x;
}
public int IMyInt//隐式接口实现
{
get { return _x; }
set { _x = value; }
}
public event EventHandler Event;
protected void onEvent()
{
if (Event == null)
{
Event(this, EventArgs.Empty);
}
}
public string this[int index]
{
get { return _x.ToString(); }
set { _x = int.Parse(value); }
}
}
1、显示接口实现,只能通过接口访问:
MyInterface myClass=new MyClass();
myClass.DoSth();
2、隐式接口实现,既可通过类,也可通过接口访问。
MyClass myClass=new MyClass();
myClass.DoSth();
索引器indexer是一种特殊类型的属性。添加到类中,以提供类似于数组的访问。
void Main()
{
MyClass myClass = new MyClass();
myClass[0] = "d";
Console.Write(myClass[0]);//d
Console.Write(myClass[2]);//c
}
public class MyClass
{
private string[] arr = { "a", "b", "c" };
public string this[int index]
{
get { return arr[index]; }//只有get,无set的索引为只读索引
set { arr[index] = value; }
}
}
void Main()
{
MyClass myClass1 = new MyClass(500);
MyClass myClass2 = new MyClass(200);
Console.Write(myClass1 - myClass2);//300
}
public class MyClass
{
decimal weight;
public MyClass(decimal weight)
{
this.weight = weight;
}
public static decimal operator -(MyClass a, MyClass b)
{
return a.weight - b.weight;
}
}
void Main()
{
MyClass myClass1 = new MyClass();
myClass1.myEvent += (sender, args) => { Console.Write(sender); };
myClass1.TriggerEvent();//MyClass
}
public class MyClass
{
public event EventHandler<EventArgs> myEvent;//定义事件
public void TriggerEvent()
{
EventHandler<EventArgs> temp = myEvent;
if (temp != null)
temp(this, EventArgs.Empty);//触发事件
}
}
--结束END--
本文标题: C#入门之定义类成员与接口实现
本文链接: https://www.lsjlt.com/news/148335.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0